2013-06-14 17 views
5

のフィルタの間のSelectedItemをしてください:は、私はこのようなフィルタされているリストボックスを持ってCollectionViewSource

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

フィルタを適用すると、SelectedItemnullに設定されています。しかし、ユーザーが実際にそれをクリックしない限り、その選択したアイテムを保持したい。フィルタが削除されても、選択された項目は選択されたままです。モデルにはIsSelectedというプロパティがあり、私はIsSelectedプロパティのクエリ方法を考えようとしています。しかし、その後、ビューの結合は、私が期待どおりに動作しないでしょう....または少なくとも私はそれができない

+0

コレクションにプライマリキーがいくつかある場合は、フィルタリングする前にこのIDを保存して、フィルタ処理後にこのIDで選択したアイテムを設定できます – blindmeis

答えて

0

を考え界でつもりここで修正を達成するための私の唯一の方法は、次のようにSelectionChangedイベントである:

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

しかし、これは実際にはハッキーで、最初に選択されたアイテムが常に選択されている必要があります。この場合、それはうまくいくかもしれませんが、誰かがより良い解決策を持っているかどうかはまだ分かりますか?

0

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

0

これを解決するには、現在選択されている項目を常にフィルタリングされた項目に追加するフィルタを作成します。これを直接行うことができない場合は、選択した項目を別の変数に保持してください。

関連する問題