[英]What are the pros and cons of using CancellationTokens as alternatives to events?
[英]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
)時,目標對象通常檢查實際屬性值是否實現INotifyCollectionChanged
( ObservableCollection
所做的事情)並附加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.