两个ListView在同一数据集上具有不同的过滤器

时间:2015-07-30 16:13:35

标签: wpf mvvm

我有一个带有ObservableCollection _questions的ViewModel,它在创建VM实例时从DB加载。此列表还用于收集数据以保存回DB。

此Vm用于View1,它在ListView中显示列表,并使用CollectionViewSource.GetDefaultView(_questions)按属性进行过滤.Filter = ...

现在我需要创建View2,它将显示相同的列表但不进行过滤。 我无法将它绑定到相同的ObservableCollection _questions,因为它在CollectionViewSource上定义了过滤器,但我需要使用它来保持SaveToDb代码相同。

对于两个不同的ListView,是否可以对同一数据源进行不同的过滤?

1 个答案:

答案 0 :(得分:1)

我从未喜欢使用CollectionViewSource。我会使用我的ViewModel中的一个新属性进行过滤,该属性使用Linq进行过滤:

public IEnumerable<MyType> FilteredItems()
{
    get
    {
        return MyCollection.Where(x => x.MyProperty == SomeValue).ToArray;
    }
}

然后我将ItemsSource绑定到此属性并使用INotifyPropertyChanged事件通知UI集合的更改。

很难说这是否适合您的情况,因为没有提供有关您需要实现的信息的信息。