ObservableCollection和BindingList之间的区别
我想知道ObservableCollection和BindingList之间的区别,因为我已经使用它来通知源中的任何添加/删除更改,但实际上我不知道什么时候更喜欢一个。 
为什么我会select其中一个?
 ObservableCollection<Employee> lstEmp = new ObservableCollection<Employee>(); 
要么
 BindingList<Employee> lstEmp = new BindingList<Employee>(); 
	
  ObservableCollection可以像任何集合一样从UI更新。 真正的区别是相当直接的: 
  ObservableCollection<T>实现了INotifyCollectionChanged ,它在集合被改变时提供通知(你猜到^^)它允许绑定引擎在更新ObservableCollection时更新UI。 
 但是, BindingList<T>实现IBindingList 。 
  IBindingList提供收集更改的通知,但不仅如此。 它提供了一大堆的function,可以被用户界面用来提供更多的东西,而不仅仅是UI更新根据变化,如: 
- sorting
- search
- 添加工厂(AddNew成员函数)。
- 只读列表(CanEdit属性)
 所有这些function在ObservableCollection<T>中都不可用 
 另一个区别是,当项目实现INotifyPropertyChanged时, BindingList中继项目变更通知。 如果一个项目引发一个PropertyChanged事件, BindingList将会收到一个带有ListChangedType.ItemChanged和OldIndex=NewIndex (如果一个项目被replace, OldIndex=-1 )的ListChangedType.ItemChanged 。  ObservableCollection不会中继项目通知。 
 请注意,在Silverlight中, BindingList不可用作为选项:但是,您可以使用ObservableCollection和ICollectionView (如果我还记得,还可以使用IPagedCollectionView )。 
实际的区别是BindingList是用于WinForms,而ObservableCollection是用于WPF。
从WPF的angular度来看,BindingList并没有得到很好的支持,除非你真的必须在WPF项目中使用它。
  ObservableCollection和BindingList之间的一个更大的区别来得方便,并且可以作为该主题的出价决定因素: 
  BindingList列表更改处理程序: 
  
 
  ObservableCollection集合更改: 
  
 
上面简述:如果一个项目的属性在
BindingList被改变,那么ListChanged事件会给你属性的完整细节(在PropertyDescriptor中),而ObservableCollection不会给你这个。 实际上,ObservableCollection不会引发项目中更改的属性的更改事件。
 以上结论是关于在模型类中实现的INotifyPropertyChanged 。 默认情况下,如果项目中的属性发生更改,则不会引发更改的事件。