2016-11-02 5 views
0

ObservableCollectionのアイテムをフィルタリングして、コレクション内の特定のアイテムのみがデータグリッドに表示されるようにするフィルタがあります。 OCはMyTruckCollectionと呼ばれます。コレクション内の結果をコレクションから除外せずにフィルタリングします。

私が結果を除外することができる唯一の方法は、私が欲しくない項目を削除し、必要な項目を追加することです。 (私は、コレクション内の特定の項目を非表示にすることはできません)

例:

var filteredList = MyTruckCollection.Where(x => x.TruckStatus == filterValue).ToList(); 
MyTruckCollection.Clear(); 
foreach (var filteredItem in filteredList) 
    MyTruckCollection.Add(filteredItem); 

今私の問題は、ときに私はので、私は、私はリストからしたくない項目を削除したくないということです別のフィルタを追加すると、コレクションには前のフィルタで追加された項目のみが含まれます。だから私のコレクションのアイテムのリストは、私が追加するすべてのフィルターで小さくなってきています。

質問:私のOCの特定の項目を削除せずにフィルタリングし、データグリッドのUIを更新する方法はありますか?

dgMyTruckCollection.ItemSource = MyTruckCollection.Where(x => x.TruckStatus == filterValue); 

をしかし、私は、私はそれにソート関数を適用するために私のコレクションへの緩いアクセスしたい場合やUIは更新されません。

私もこれを行うことができます。私はMVVMにあまりにも良くないので、それについて多くのことを知らないので、もし誰かが私を助けてくれたら?

+0

CollectionView(http://wpftutorial.net/DataViews.html) – ASh

+0

なぜあなたはMyTruckCollection.Clear()ですか?あなたはコレクションを再利用したいとき? – mybirthname

+0

@mybirthnameそれ以外の場合は、追加したアイテムは何度も追加され、コレクションに重複はありません。それとももっと良い方法がありますか? – CareTaker22

答えて

2

フィルタリング/並べ替えタスクにICollectionViewインターフェイスを使用できます。あなたはMyTruckCollectionすべての値を保持している民間myTruckCollection上で呼び出されたときにアクティブフィルタを適用し、GET専用のプロパティにすることができ、この

ICollectionView MyTruckCollectionView= CollectionViewSource.GetDefaultView(MyTruckCollection); 
MyTruckCollectionView.Filter = o => ((Truck)o).TruckStatus==filterValue 
MyTruckCollectionView.SortDescriptions.Add(new SortDescription("field", ListSortDirection.Ascending)); 
.... 
+0

例が正常に動作するように正常に動作しました。 :) – CareTaker22

0

ようなものになるだろう。

関連する問題