[英]Linq in from ObservableCollection in ObservableCollection
[英]LINQ with ObservableCollection
我有一个 ObservableCollection 属性,我需要用 LINQ 来操作它。
我想要做的是根据项目的属性,获取第一个集合并从另一个集合中删除项目。
这是我到目前为止:
ItemsObservableCollection = ItemsObservableCollection.Where(i=>!selectedItemsObservableCollection.Any(y=> y.name == i.Name);
如果我这样做,我会收到一个转换错误,提示我无法将 IEnumerable 转换为 ObservableCollection。 如果我将值保存到一个 var 中,它完全符合我的要求:
var collectionItems= ItemsObservableCollection.Where(i=>!selectedItemsObservableCollection.Any(y=> y.name == i.Name);
但我需要它来更新 ObservableCollection 属性。
您可以只从原始集合中删除您想要的项目,而不是创建新集合。 例如,如果您在 WPF 中工作并将可观察集合绑定到控件,则这是更可取的。
var itemsToRemove = ItemsObservableCollection.Where(
i => !selectedItemsObservableCollection.Any(y => y.name == i.Name)).ToList();
foreach (var item in itemsToRemove)
ItemsObservableCollection.Remove(item);
(必须使用ToList()
来避免“集合被修改”错误。)
好吧,你有一个 ObservableCollection ctor,它接受一个IEnumerable<T>
所以你可以这样做
ItemsObservablecollection = new ObservableCollection<DesiredType>(ItemsObservableCollection.Where(i=>!selectedItemsObservableCollection.Any(y=> y.name == i.Name));
你需要我的ObservableComputations库。 这是用于计算INotifyPropertyChanged和INotifyCollectionChanged (ObservableCollection) 对象的 .NET API。 计算结果是 INotifyPropertyChanged 和 INotifyCollectionChanged (ObservableCollection) 对象。
使用这个库,你可以这样编码:
var collectionItems= ItemsObservableCollection.Filtering(i=>
!selectedItemsObservableCollection.AnyComputing(y => y.name == i.Name).Value);
collectionItems 是ObservableCollection并反映 ItemsObservableCollection 集合和 Name 属性中的所有更改。 确保上面代码中提到的所有属性都通过INotifyPropertyChanged接口通知更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.