我觉得INotifyPropertyChanged
通常是约属性值更新基于推送的通知的权利机制。
备选:
但是,它不是实现这一目标的唯一可能的机制。例如,Windows窗体也支持每个属性单独的…Changed
事件;即如果您拥有名为Foo
的房产,则可能会在Foo
的设置人员中触发相关联的FooChanged
事件。
具有单独的…Changed
事件具有特定于某个特定属性的优势,因此不需要观察者/订阅者过滤掉他们不感兴趣的属性的通知。另一方面,您的(数据)一旦您必须声明50个额外的…Changed
事件,对象可能开始感觉“体积庞大”。
有关实现INotifyPropertyChanged
一些注意事项:
如果你厌倦了重新写一遍又一遍相同的样板代码...:
public T SomeProperty
{
get { … }
set
{
if (someProperty != value)
{
someProperty = value;
NotifyPropertyChanged("SomeProperty");
}
}
}
private T someProperty;
,那么你可能想考虑一个AOP框架(如PostSharp)。我记得CodePlex或Google Code上有一个库,可以为你自动执行INotifyPropertyChanged
(或重写CIL字节码);不幸的是我不记得图书馆的名字。
还有其他相关接口INotifyPropertyChanging
,INotifyListChanged
等您也许也想看看这些。
只是出于好奇:为什么执行一个getter更改的调用? – WaltiD
感谢您指出,并不意味着包括这一点。我已经更新了这个问题。 – mservidio