2011-01-22 77 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

相关问题