2010-06-23 169 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