C# 中的INotifyPropertyChanged和ObservableCollection
來源:互聯網
上載者:User
INotifyPropertyChanged它的作用:向用戶端發出某一屬性值已更改的通知。當屬性改變時,它可以通知用戶端,並進行介面資料更新.而我們不用寫很多複雜的代碼來更新介面資料,這樣可以做到方法簡潔而清晰,松耦合和讓方法變得更通用.可用的地方太多了:例如上傳進度,即時後台資料變更等地方。它的作用:向用戶端發出某一屬性值已更改的通知。當屬性改變時,它可以通知用戶端,並進行介面資料更新.而我們不用寫很多複雜的代碼來更新介面資料,這樣可以做到方法簡潔而清晰,松耦合和讓方法變得更通用.可用的地方太多了:例如上傳進度,即時後台資料變更等地方.目前我發現winform和silverlight都支援,確實是一個強大的介面.在建構函式中先綁定public Class_Name() { User user = new User(); user.Name = "your name"; user.Address = "your address"; textBox1.Text = user.Name; textBox2.Text = user.Address; } 編寫一個簡單的業務類public class User : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private string _name; public string Name { get { return _name; } set { _name = value; if(PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Name")); } } } private string _address; public string Address { get { return _address; } set { _address = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Address")); } } } }
ObservableCollection綁定到集合資料繫結的資料來源對象可以是一個含有資料的單一對象,也可以是一個對象的集合。之前,一直在討論如何將目標對象與一個單一對象綁定。Silverlight中的資料繫結還能將目標對象與集合對象相綁定,這也是很常用的。比如顯示文章的題目列表、顯示一系列圖片等。如果要綁定到一個集合類型的資料來源對象,繫結目標可以使用ItemsControl,如ListBox或DataGrid等。另外,通過定製ItemsControl的資料範本(DataTemplate),還可以控制集合對象中每一項的顯示。
使用ObservableCollection資料來源集合對象必須繼承IEnumerable介面,為了讓目標屬性與資料來源集合的更新(不但包括元素的修改,還包括元素的增加和刪除)保持同步,資料來源集合還必須實現INotifyPropertyChanged介面和INotifyCollectionChanged介面。在Silverlight中建立資料來源集合可以使用內建的ObservableCollection類,因為ObservableCollection類既實現了INotifyPropertyChanged介面,又實現了INotifyCollectionChanged介面。使用ObservableCollection類不但可以實現Add、Remove、Clear和Insert操作,還可以觸發PropertyChanged事件。