我经常对此感到疑惑:对于任何属性INotifyPropertyChanged
,Foo
的以下两个实现中的哪一个更好,甚至更正确?
/* 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,因为它可以防止触发不必要的事件。但是,是否存在这些相同的,错过的事件可能导致问题的情况?
答案 0 :(得分:5)
版本B看起来更正确,因为如果属性实际上没有更改值,它不会引发事件。版本A没有任何问题,它只是一个不必要的调用,不会更新任何UI。
一样通知客户端属性值 已经改变了。