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的博客条目如何从集合中过滤项目。
| 归档时间: |
|
| 查看次数: |
593 次 |
| 最近记录: |