2016-11-02 75 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中的某些項目而不刪除它們,並仍然更新我的數據網格的用戶界面。

我能做到這一點,以及:

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

但後來我如果我想一個排序功能適用於它鬆動訪問我的收集和用戶界面沒有更新。我對MVVM不太瞭解,也不太瞭解,所以如果有人能幫助我?

+0

你可以使用CollectionView(http://wpftutorial.net/DataViews.html) – ASh

+0

爲什麼你是MyTruckCollection.Clear();當你想重用這個集合? – mybirthname

+0

@mybirthname否則,我添加的項目將被添加多次,並且我不想在集合中添加重複項。還是有更好的方法來做到這一點? – CareTaker22

回答

2

您可以使用ICollectionView接口進行過濾/排序任務。請問是這樣的

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

非常感謝該示例正確運行,因爲它應該。 :) – CareTaker22

0

您可以MyTruckCollection時叫了過來保存所有值的私人myTruckCollection適用的有源濾波器一個只能獲得屬性。