INotifyPropertyChanged是相当自我解释的,我想我很清楚何时提出那个(即我已经完成更新值)。
如果我实现了INotifyPropertyChanging,我会在进入setter或其他更改对象状态的方法后立即引发事件,然后继续执行可能发生的任何保护和验证。
因此,我将此事件视为可能已更改但尚未更改的通知,并且可能实际上未成功完成更改。
如果对象的使用者正在使用这个属性(就像让我们说LINQ to SQL使用事件进行更改跟踪)我是否应该暂停并且只有在我验证了我给出的值是好的并且对象的状态对更改有效吗?
这次活动的合同是什么,订户会有什么副作用?
如果您的对象被赋予一个对该属性无效的值,并且您抛出异常,那么您不应该提出 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");
}
}
如果您的对象被赋予一个对该属性无效的值,并且您抛出异常,那么您不应该提出 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");
}
}
作为旁白 - PostSharp 有自动实现INotifyPropertyChanged的有趣能力 - 像这样。
如果您想完全避免实现INotifyPropertyChanged,请考虑使用 更新控制.NET 代替。这消除了几乎所有的簿记代码。