2011-01-22 36 views
1

我很想知道這個問題:INotifyPropertyChanged對於任何屬性Foo的以下兩個實現中哪一個更好,甚至更正確?哪些是INotifyPropertyChanged更正確的實現?

/* version A: */      |  /* version B: */ 
private bool foo;      |  private bool foo; 
public bool Foo      |  public bool Foo 
{          |  { 
    set        |  set 
    {         |  { 
             |   if (value != foo) 
             |   { 
     foo = value;     |    foo = value; 
     OnPropertyChanged("Foo");  |    OnPropertyChanged("Foo"); 
             |   } 
    }         |  } 
}          |  } 

(我省略了一切,這是不相關的這個問題。)

我懷疑它應該是版本B上的權利,因爲它可以防止不必要的觸發事件。但是,是否有這些相同的錯過事件會導致問題?

回答

5

版本B看起來更正確,因爲如果該屬性未實際更改值,則不會引發該事件。版本A不會有任何問題,這只是一個不需要更新任何UI的不必要的調用。

而作爲documentation states

通知客戶端的屬性值 發生了變化。

+0

您認爲B可能會導致問題,即訂閱者希望每次將屬性*寫入*(而不是*更改爲值*)時觸發事件? – stakx 2011-01-22 09:56:18