2010-06-23 125 views
2

我有一個包含任務集合的項目集合列表。在我的ViewModel上,我有一個項目的ICollectionView,所以我可以過濾標記爲已完成的項目,參見下面的過濾器代碼。在集合中過濾集合MVVM

public void FilterDoneItems() 
    { 
     if (this.MarkDone) 
     { 
      ProjectsViewSource.Filter = new Predicate<object>(FilterDone); 
     } 
     else 
     { 
      ProjectsViewSource.Filter = null; 
     } 
    } 

這適用於項目,但我也想篩選出完成的任務。由於ProjectDTO包含任務(列表),因此我無法將任務包裝在ICollectionView中以在ViewModel中對其進行過濾。

我不確定如何最好地去過濾任務以及任何人都可以幫忙嗎?

回答

1

每個集合都有一個由WPF維護的默認集合視圖,當您綁定到集合時,WPF將實際綁定到該視圖。你可以通過調用CollectionViewSource.GetDefaultView得到這種觀點的引用,並設置該過濾器:

CollectionViewSource.GetDefaultView(someList).Filter = somePredicate; 
+0

我必須綁定到CollectionViewSource或可我還是結合實際收集和有過濾? – Burt 2010-06-24 09:38:05

+2

@Burt:你仍然綁定到實際的集合。從CollectionViewSource.GetDefaultView文檔:「如果直接綁定到集合,WPF實際綁定到該集合的默認視圖。」 – Quartermeister 2010-06-24 11:33:45