在IEnumerable上使用Observable Collection的优点和缺点
我试图决定是否要将所有IEnumerable
集合切换到Observable Collections。 我找不到对此的好解释。 可理解的术语中Observable Collection的优点和缺点是什么?
您可能决定将IEnumerable
作为某个属性的类型,但使用ObservableCollection
作为实际值。
如果您有这样的房产:
private IEnumerable collectionOfSomething; public IEnumerable CollectionOfSomething { get { return collectionOfSomething; } set { collectionOfSomething = value; NotifyPropertyChanged("CollectionOfSomething"); } }
现在你可以简单地分配给那个属性
someViewModelObject.CollectionOfSomething = new ObservableCollection();
当您分配或绑定到集合属性(例如ItemsControl.ItemsSource
)时,目标对象通常会检查实际属性值是否实现INotifyCollectionChanged
( ObservableCollection
作用)并附加CollectionChanged
处理程序以获取有关源集合中更改的通知。
如果您以后决定使用其他更智能的INotifyCollectionChanged
实现, INotifyCollectionChanged
无需更改所有属性类型。 只需用这样的东西替换任务即可
someViewModelObject.CollectionOfSomething = new MyVerySmartCollection();
我可能会以这种方式确定您的问题的答案:当您的collections集更改内容时,是否需要通知您的应用程序? 如果是这样,那么这种改变可能是有道理的。 我的理解是Observable集合的首要特性是它们在集合更改时提供通知机制,而IEnumerable仅提供单迭代枚举器。
我希望有所帮助。
使用ObservableCollection的最大好处是它自动实现了INotifyCollectionChanged和INotifyPropertyChanged,这使得数据绑定变得更加简单。 我会说在你第一次设置数据绑定时最好使用ObservableCollection。
但是既然你已经编写了(和数据绑定的?)一堆IEnumebles,那么就没有任何节省。
另一件需要考虑的事情是ObservableCollection
是一个 IEnumerable
(inheritance自Collection
)。 由于IEnumerable
是一个接口,它由许多类实现List
就是这样一个类 – ObservableCollection
是另一个。
Observable集合的全部意义在于它们实现了以下接口
INotifyCollectionChanged, INotifyPropertyChanged
这使得很容易提醒UI / ViewModel更改并相应地更新。 如果您没有使用ObservableCollection,则需要手动自己实现对集合/属性的更新。