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)
我可以自己实现。我只是觉得有人解决了这个问题,并且有很好的解决方案(我只是不知道它的名字)。
看一下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的博客条目如何从集合中过滤项目。