我想知道 和 之间的区别ObservableCollection,BindingList因为我已经使用两者来通知 Source 中的任何添加/删除更改,但实际上我不知道何时更喜欢其中一个。
ObservableCollection
BindingList
为什么我会选择以下其中一项而不是另一项?
ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();
或者
BindingList<Employee> lstEmp = new BindingList<Employee>();
可以ObservableCollection像任何集合一样从 UI 更新。真正的区别相当简单:
ObservableCollection<T>实现INotifyCollectionChanged在集合更改时提供通知(您猜对了^^)它允许绑定引擎在更新时更新 UI ObservableCollection。
ObservableCollection<T>
INotifyCollectionChanged
但是,BindingList<T>实现IBindingList.
BindingList<T>
IBindingList
IBindingList提供有关集合更改的通知,但不仅如此。它提供了一整套功能,UI 可以使用这些功能来提供更多的东西,而不仅仅是根据更改更新 UI,例如:
所有这些功能在ObservableCollection<T>
另一个区别是BindingList在其项目实施时中继项目更改通知INotifyPropertyChanged。如果一个项目引发了一个PropertyChanged事件,将接收它并BindingList引发一个ListChangedEvent与(如果一个项目被替换,)。不中继项目通知。ListChangedType.ItemChanged``OldIndex=NewIndex``OldIndex=-1``ObservableCollection
INotifyPropertyChanged
PropertyChanged
ListChangedEvent
ListChangedType.ItemChanged``OldIndex=NewIndex``OldIndex=-1``ObservableCollection
请注意,在 Silverlight 中,BindingList不能作为选项使用:但是您可以使用ObservableCollections 和ICollectionView(IPagedCollectionView如果我没记错的话)。
ICollectionView
IPagedCollectionView