以下哪一项是更正确的INotifyPropertyChanged实现?

时间:2011-01-22 09:52:59

标签: c# inotifypropertychanged

我经常对此感到疑惑:对于任何属性INotifyPropertyChangedFoo的以下两个实现中的哪一个更好,甚至更正确?

/* 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,因为它可以防止触发不必要的事件。但是,是否存在这些相同的,错过的事件可能导致问题的情况?

1 个答案:

答案 0 :(得分:5)

版本B看起来更正确,因为如果属性实际上没有更改值,它不会引发事件。版本A没有任何问题,它只是一个不必要的调用,不会更新任何UI。

documentation states

一样
  

通知客户端属性值   已经改变了。