簡體   English   中英

在IEnumerable上使用Observable Collection的利弊

[英]Pros and Cons of using Observable Collection over IEnumerable

我試圖決定是否要將所有IEnumerable集合都切換到Observable集合。 我對此找不到很好的解釋。 用可理解的術語來說,可觀測集合的利弊是什么?

您可能決定將IEnumerable<Something>作為某些屬性的類型,但是將ObservableCollection<Something>用作實際值。

如果您具有這樣的屬性:

private IEnumerable<Something> collectionOfSomething;
public IEnumerable<Something> CollectionOfSomething
{
    get { return collectionOfSomething; }
    set
    {
        collectionOfSomething = value;
        NotifyPropertyChanged("CollectionOfSomething");
    }
}

現在,您可以簡單地分配給該屬性,例如

someViewModelObject.CollectionOfSomething = new ObservableCollection<Something>();

當您分配或綁定到集合屬性(例如ItemsControl.ItemsSource )時,目標對象通常檢查實際屬性值是否實現INotifyCollectionChangedObservableCollection所做的事情)並附加CollectionChanged處理程序以獲取有關源集合中更改的通知。

如果您以后決定使用INotifyCollectionChanged其他一些更智能的實現, INotifyCollectionChanged無需更改所有屬性類型。 只需將作業替換為類似的內容

someViewModelObject.CollectionOfSomething = new MyVerySmartCollection<Something>();

我可能會這樣回答您的問題:當集合更改內容時,是否需要通知您的應用程序? 如果是這樣,則可能需要進行此類更改。 我的理解是,Observable集合的總體功能是,當集合發生更改時,它們提供了一種通知機制,而IEnumerable僅提供了單迭代枚舉器。

希望對您有所幫助。

使用ObservableCollection的最大好處是,它可以自動實現INotifyCollectionChanged和INotifyPropertyChanged,這使其更易於進行數據綁定。 我會說,最好是在初次設置數據綁定時使用ObservableCollection。

但是,既然您已經編碼了(並綁定了數據?)一堆IEnumerables,那么此時就沒有任何節省了。

要考慮的另一件事是ObservableCollection<T> IEnumerable (繼承自Collection<T> )。 因為IEnumerable是一個接口,所以它由許多類List<T>實現,而ObservableCollection<T>是另一個。

Observable集合的全部要點是它們實現了以下接口

 INotifyCollectionChanged, INotifyPropertyChanged 

這使警告UI / ViewModel更改並進行相應更新非常容易。 如果您不使用ObservableCollection,則需要您自己手動實現對集合/屬性的更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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