[英]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.