在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 )时,目标对象通常会检查实际属性值是否实现INotifyCollectionChangedObservableCollection作用)并附加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,则需要手动自己实现对集合/属性的更新。