如何在一个Collection上定义2个单独的过滤器?

时间:2012-11-15 11:12:15

标签: wpf data-binding mvvm

我有一个出现在2个单独列表中的集合。一个列表应显示所有项目(未过滤),第二个列表应显示符合特定标准(已过滤)的项目。

2个列表的ItemsSource属性绑定到ViewModel中的2个属性。

我尝试为已过滤的列表设置DefaultView,但它会影响两个列表。

ListCollectionView view = (ListCollectionView) CollectionViewSource.GetDefaultView(_manager.Modules);
view.Filter = delegate(object item)
{
    Model.BaseModule bm = item as Model.BaseModule;
    if (bm != null)
    {
        return bm is TemplatedUnitOfTest && ((TemplatedUnitOfTest)bm).TemplateGuid == _uot.Header.Id;
    }
    return false;
};

我该怎么做?

1 个答案:

答案 0 :(得分:3)

不是改变默认视图,而是显式创建两个单独的ListCollectionView实例,过滤一个,并将每个列表绑定到相关视图。

ItemsControl(或派生词)将始终将Items集合包装在CollectionView中,然后再显示 - 如果您自己执行此步骤,那么您拥有更多地控制所显示的内容。