C# 中的INotifyPropertyChanged和ObservableCollection

l_serein發表於2013-04-11
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事件。

相關文章