5

次のようにフィルターされているリストボックスがあります。

var view = CollectionViewSource.GetDefaultView(FilterSource);
view.Filter = FilterCode;

SelectedItem次のようなビューモデル コードでフィルターを使用すると、 が失われるという問題が発生しています。

VM
{
    public ObservableCollection<Model> Items{get;set;}
    public Model SelectedItem
    {
        get{return _selectedItem;}
        set{_selectedItem = value; NotifyPropertyChanged();}
    }
}

フィルタが適用されると、SelectedItemが に設定されnullます。ただし、ユーザーが実際にクリックしない限り、選択したアイテムを保持したいと思います。フィルタを削除しても、選択したアイテムは引き続き選択されているはずです。モデルにはプロパティがあり、IsSelectedプロパティを照会する方法を考えていIsSelectedます。ただし、ビューのバインディングは期待どおりに機能しません....または、少なくとも私はそれができないと考えて輪になっています

4

3 に答える 3

1

ここで修正を行う唯一の方法は、次のSelectionChangedイベントです。

if (e.AddedItems.Count == 0 && e.RemovedItems.Count >= 0)
    SpecialtyListBox.SelectedItem = e.RemovedItems[0];

しかし、これは非常にハックなようで、最初の項目が選択されると常に項目が選択されている必要があります。この場合、それはうまくいくかもしれませんが、誰かがより良い解決策を持っているかどうかを知りたいですか?

于 2013-06-14T03:54:01.483 に答える
0

リストボックスがタブ付きビューとして表示されるという同様の問題がありました。「isActive」のブール値フラグを生成する Converter を作成し、それを CollectionViewSource.IsLiveFilteringRequested に割り当てることで問題を解決しました。これにより、非アクティブなリスト ボックスが選択された項目を更新できなくなりました。

于 2016-01-20T09:22:10.793 に答える