在IEnumerable上使用Observable Collection的优点和缺点

时间:2013-02-12 17:04:25

标签: c# wpf collections ienumerable observablecollection

我正在尝试决定是否要将所有IEnumerable个集合切换到Observable Collections。我找不到对此的好解释。可观察的术语中可观察集合的优缺点是什么?

4 个答案:

答案 0 :(得分:13)

您可能决定将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实现,则无需更改所有属性类型。只需用类似的东西替换作业

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

答案 1 :(得分:3)

我可能会以这种方式确定您问题的答案:当您的收藏集更改内容时,是否需要通知您的应用程序?如果是这样,那么可能需要进行这样的改变。我的理解是Observable集合的首要特性是它们在集合发生变化时提供通知机制,而IEnumerable只提供单迭代枚举器。

我希望有所帮助。

答案 2 :(得分:2)

使用ObservableCollection的最大好处是它自动实现了INotifyCollectionChanged和INotifyPropertyChanged,这使得数据绑定变得更加简单。我会说在你第一次设置数据绑定时最好使用ObservableCollection。

但是既然你已经编写了(和数据绑定的?)一堆IEnumerables,那么现在还没有任何节省。

要考虑的另一件事是ObservableCollection<T> IEnumerable(继承自Collection<T>)。由于IEnumerable是一个接口,因此它由许多类实现List<T>就是这样一个类 - ObservableCollection<T>是另一个类。

答案 3 :(得分:1)

Observable集合的全部意义在于它们实现了以下接口

 INotifyCollectionChanged, INotifyPropertyChanged 

这样可以非常轻松地提醒UI / ViewModel更改并相应地进行更新。如果您没有使用ObservableCollection,则需要手动自己实现对集合/属性的更新。