"ObservableCollection与BindingList的区别
"ObservableCollection与BindingList的区别
我想知道ObservableCollection
和BindingList
之间的区别,因为我都使用它们来通知源中的任何添加/删除更改,但我实际上不知道何时使用其中一个。
为什么会选择以下之一而不是另一个?
ObservableCollection lstEmp = new ObservableCollection();
或
BindingList lstEmp = new BindingList();
ObservableCollection
可以像任何集合一样从UI更新。真正的区别相当简单:
ObservableCollection
实现了INotifyCollectionChanged
,提供集合发生变化时的通知(你猜对了^^)
当ObservableCollection
被更新时,它允许绑定引擎更新UI。
然而,BindingList
实现了IBindingList
。
IBindingList
提供了关于集合更改的通知,但不仅如此。它提供了一整套功能,可以被UI用来提供更多的东西,而不仅仅是根据更改更新UI,例如:
- 排序
- 搜索
- 通过工厂添加(AddNew成员函数)。
- 只读列表(CanEdit属性)
所有这些功能在ObservableCollection
中都不可用。
另一个区别是,当BindingList
的项目实现了INotifyPropertyChanged
时,BindingList
会转发项目更改通知。如果一个项目引发了一个PropertyChanged
事件,BindingList
将接收到它,并引发一个ListChangedEvent
,其ListChangedType.ItemChanged
和OldIndex = NewIndex
(如果一个项目被替换,OldIndex = -1
)。ObservableCollection
不会转发项目通知。
请注意,在Silverlight中,BindingList
不可用作选项:但是,您可以使用ObservableCollection
和ICollectionView
(如果我没记错的话,还有IPagedCollectionView
)。