gpt4 book ai didi

.net - 使用 lambda 的 ObservableCollection 切片

转载 作者:行者123 更新时间:2023-12-01 11:59:25 26 4
gpt4 key购买 nike

我有 ObservableCollection<ViewUnit> _myItems字段,其中 ViewUnit工具 INotifyPropertyChanged .

ViewUnitHandled : bool属性(property)。

WPF应用程序的主视图有一个ListBox绑定(bind)到 _myItems .

我只想单独查看未处理的项目,即有一个 IObservableCollection<>取决于现有 _myItems但仅过滤项目,最好使用 lambda 表达式。

理想情况下,这是

IObservableCollection<ViewUnit> _myFilteredCollection = HelperClass<ViewUnit>.FromExisting(_myItems, (e) => !e.Handled);

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

最佳答案

看看CollectionView .这是一个围绕处理过滤、分组和排序的集合的 View 。当您要求 WPF 绑定(bind)到一个集合时,它实际上绑定(bind)到它的默认 View ,因此您可以像这样过滤默认 Collection View :

var collectionView = CollectionViewSource.GetDefaultView(_myItems);
collectionView.Filter = e => !((ViewUnit)e).Handled;

过滤器是 object 的谓词,因此您必须将参数转换为 ViewUnit。如果属性更改,它也不会收到通知,因此如果 Handled 属性更改,您需要调用 collectionView.Refresh。不过,如果您在 _myItems 中添加或删除,它将会更新。

另请查看 Bea Stollnitz 的博客条目 How do I filter items from a collection .

关于.net - 使用 lambda 的 ObservableCollection 切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3080658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com