INotifyPropertyChanged是相当自我解释的,我想我很清楚何时提出那个(即我完成更新值时)。
如果我实现了INotifyPropertyChanging,我会在进入setter或其他更改对象状态的方法后立即引发事件,然后继续执行可能发生的任何保护和验证。
因此,我将此事件视为可能更改但尚未更改的通知,并且可能实际上未成功完成更改。
如果对象的使用者正在使用此属性(比如让我们说LINQ to SQL使用事件进行更改跟踪)我是否应该暂停并且只有在我验证了我给出的值后才提升事件好,对象的状态对变化有效吗?
此活动的合约是什么?订阅者会有什么副作用?
答案 0 :(得分:13)
如果您的对象被赋予对该属性无效的值并且您抛出异常,那么您不应该引发PropertyChanging
事件。您应该只在确定值 更改时才引发事件。典型的使用场景是更改简单字段:
public T Foo
{ get
{ return m_Foo;
}
set
{ if (m_Foo == value) return; //no need for change (or notification)
OnPropertyChanging("Foo");
m_Foo = value;
OnPropertyChanged("Foo");
}
}
答案 1 :(得分:1)
答案 2 :(得分:0)
如果您想完全避免实现INotifyPropertyChanged,请考虑使用Update Controls .NET。这几乎消除了所有簿记代码。