簡體   English   中英

帶有 ObservableCollection 的 LINQ

[英]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庫。 這是用於計算INotifyPropertyChangedINotifyCollectionChanged (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM