2013-11-01 74 views
0

實現INotifyPropertyChanged的類。 WPF

請看看下面的代碼:此類的

public class MyClass : INotifyPropertyChanged 
{ 
    private string _myName; 

    public string MyName 
    { 
     get { return _myName; } 
     set 
     { 
      if (_myName != value) 
      { 
       _myName = value; 
       OnPropertyChanged("MyName"); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 


    private void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

對象作爲一個DataContext的WPF窗體上的TextBox控件。

想法很簡單:對該對象的MyName屬性所做的更改應自動顯示在文本框中。它的工作原理,但我不明白爲什麼。

請按照我的思維方式,指出哪裏我做錯了......

我們設置MYNAME一個新的價值。程序轉到'setter',它調用'OnPropertyChanged'。它轉到'OnPropertyChanged'並檢查'PropertyChanged'是否爲空。

而事實並非如此。我不知道爲什麼,因爲我沒有添加任何事件處理程序到這個事件。

那麼......它是如何工作的?

謝謝!

+0

的可能重複[如何WPF INotifyPropertyChanged的工作?](http://stackoverflow.com/questions/6789236/how-does-wpf-inotifypropertychanged-work) –

+0

您應改變,如果(的PropertyChanged!= NULL) PropertyChanged(this,new PropertyChangedEventArgs(propertyName));到var處理程序= PropertyChanged; if(handler!= null) handler(this,new PropertyChangedEventArgs(propertyName));好像propertychanged處理程序在if檢查和調用之間發生了變化,那麼你會得到一個空ref參數異常 – MikeT

回答

1

當您將對象綁定到DataContext時,會自動添加事件處理程序。

+0

我注意到,如果MyClass沒有實現'INotifyPropertyChanged',那麼它不會按照想要的那樣工作。這裏實現這個接口的深層含義是什麼? –

+1

@JacekWojcik - 通過實現接口,您向WPF表明您負責通知框架何時發生變化並且對象上的某個字段需要重新呈現。如果你沒有實現這個接口,你不會對WPF做出這樣的承諾,它會嘗試自己做一些事情。 –

+0

你確實意識到這是字面上的單行,對^ _ ^? – UIlrvnd

相關問題