我想知道和之间的区别ObservableCollection,BindingList因为我都曾用两者来通知Source中的任何添加/删除更改,但实际上我不知道何时比另一个更喜欢一个。
ObservableCollection
BindingList
为什么我要选择以下一项?
ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>();
要么
BindingList<Employee> lstEmp = new BindingList<Employee>();
一个ObservableCollection可以从用户界面酷似任何集合进行更新。真正的区别非常简单:
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
请注意,在Silverlight中,BindingList不是可选选项:但是,您可以使用ObservableCollections和ICollectionView(并且IPagedCollectionView我记得很好)。
ICollectionView
IPagedCollectionView