原文鏈接: http://blog.csdn.net/shanyongxu/article/details/47080685
可觀察的集合
如果需要集合中的元素核實刪除或添加的信息,就可以使用ObservableCollection<T>類.
ObservableCollection<T>類表示一個動態數據集合,在添加項,移除項或刷新整個列表時,刺激和將提供通知.
命名空間:System.Collections.ObjectModle
語法:public class ObservableCollection<T>:Collection<T>,INotifyCollectionChanged,INotifyPropertyChanged
在許多情況下,所使用的數據是對象的集合.例如,數據綁定中的一個常見方案是使用ItemsControl(如ListBox,ListView或TreeView)來顯示記錄的集合.
可以枚舉實現IEnumerable接口的任何集合.但是若要設置動態綁定,以使集合中的插入或刪除操作可以自動更新UI,則該集合必須實現INotifyCollectionChanged接口.此接口公開CollectionChanged事件,只要基礎集合發生更改,都應該引發該事件.
WPF提供ObservableCollection<T>類,它是實現INotifyCollectionChanged接口的數據集合的內置實現.在實現自己的集合之前,請先考慮ObservableCollection<T>或一個現有的集合類,如List<T>,collection<T>和BindingList<T>等.如果有高級方案並且希望實現自己的集合,請考慮使用IList,它提供可以通過索引朱哥訪問的對象的非泛型集合.如果實現IList,則將使用數據綁定引擎提供最佳性能.
ObservableCollection的缺點:
當集合中的屬性中改變是2沒有提供任何的通知機制.在陳旭運行的過程中,通過新增,傷處或者改變ObservableCollection集合中的數據時,只有新增和刪除數據時,UI集合中的數據才改變.但是在修改集合中已經存在的數據時UI層的數據卻不能改變.
這里不得不說明一下INotifyPropertyChanged,他不是一個集合,只是一個接口.在類中提供一個事件PropertyChanged,當屬性的值發生改變時通知客戶端.如果對象的狀態發生改變時(新增,修改,刪除)將處罰書劍PropertyChanged只想那些已經發生改變的集合.
ObservableCollection能通知它變化了也正是因為他事先了INotifyPropertyChanged接口.只是微軟給出了具體的實現,如果要寫List需要自己實現INotifyPropertyChanged接口.