使用lambda的ObservableCollection切片

boh*_*nko 3 .net data-binding wpf lambda observablecollection

我有ObservableCollection<ViewUnit> _myItems领域,在哪里的ViewUnit工具INotifyPropertyChanged

ViewUnit拥有Handled : bool财产。

WPF应用程序的主视图具有ListBox与绑定的_myItems

我只想单独查看未处理的项目,也就是说,要IObservableCollection<>依赖于现有的_myItems但只有已过滤的项目,最好使用lambda表达式。

理想情况下,这将是

IObservableCollection<ViewUnit> _myFilteredCollection = HelperClass<ViewUnit>.FromExisting(_myItems, (e) => !e.Handled);
Run Code Online (Sandbox Code Playgroud)

我可以自己实现。我只是觉得有人解决了这个问题,并且有很好的解决方案(我只是不知道它的名字)。

Qua*_*ter 5

看一下CollectionView。这是处理过滤,分组和排序的集合的视图。当您要求WPF绑定到集合时,它实际上绑定到其默认视图,因此您可以像这样过滤默认集合视图:

var collectionView = CollectionViewSource.GetDefaultView(_myItems);
collectionView.Filter = e => !((ViewUnit)e).Handled;
Run Code Online (Sandbox Code Playgroud)

过滤器是基于谓词的object,因此您必须将参数强制转换为ViewUnit。它也不会,如果属性更改通知,所以你需要调用collectionView.Refresh如果Handled属性更改。不过,如果您从中添加或删除_myItems,它将进行更新。

另请参阅Bea Stollnitz的博客条目如何从集合中过滤项目