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

JLo*_*ott 5 c# collections wpf ienumerable observablecollection

我正在尝试决定是否要将所有IEnumerable集合切换到Observable Collections.我找不到对此的好解释.可观的条款中,Observable Collection的优点和缺点是什么?

Cle*_*ens 13

您可能决定IEnumerable<Something>使用某些属性的类型,但将其ObservableCollection<Something>用作实际值.

如果您有这样的房产:

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

现在你可以简单地分配给那个属性

someViewModelObject.CollectionOfSomething = new ObservableCollection<Something>();
Run Code Online (Sandbox Code Playgroud)

当您分配或绑定到集合属性(例如ItemsControl.ItemsSource)时,目标对象通常会检查实际属性值是否实现INotifyCollectionChanged(做什么ObservableCollection)并附加CollectionChanged处理程序以获取有关源集合中更改的通知.

如果您以后决定使用其他更智能的实现,INotifyCollectionChanged则无需更改所有属性类型.只需用这样的东西替换任务即可

someViewModelObject.CollectionOfSomething = new MyVerySmartCollection<Something>();
Run Code Online (Sandbox Code Playgroud)