什么更好?INotifyPropertyChanged还是拥有单独的*Changed事件?

13

我正在设计一个包含几个属性的新类(C#),我的用户希望知道每个属性何时发生更改。

哪种方式更好?是采用INotifyPropertyChanged实现方式,还是只需拥有与我的属性相对应的单独事件?还是两者都要?

2个回答

10

往后,INotifyPropertyChanged是常态,并且在WPF中支持更好。我记得BindingList<T>只支持INotifyPropertyChanged(请参见反射器中的HookPropertyChangedUnhookPropertyChanged)。

这样做更加高效,因为UI只需要一个事件钩子,而不是每个事件都需要一个 - 您的类可以更加高效,因为它只需要一个处理程序字段(而不是每个属性一个或通过EventHandlerList和一组静态键来实现)

旧的风格主要是遗留问题。


谢谢,我修复了接口名称。 - Filip Frącz
1
但是你能想象自己使用这个吗?我的意思是,你需要进行字符串比较来找出发生了什么变化吗? - Filip Frącz
是的,基本上是这样。或者与通常具有映射名称为字符串的UI控件进行比较。 - Marc Gravell
1
如果有人像我一样来到这里,请记住,现在可以使用“nameof”在设计时引用属性名称,避免使用字符串。 - almulo

3
实现INotifyPropertyChanged接口将为您带来额外的好处,即绑定源自动侦听您对属性所做的更改并更新控件。
尝试这样做。创建一个没有INotifyPropertyChanged接口的类并将其绑定到某个东西。例如,您可以将其属性之一绑定到TextBox的Text属性上。添加一个按钮,该按钮将更改绑定到框中的实例中相应属性的值,而不是TextBox的文本。运行并单击按钮。文本框将不会收到更改通知。如果然后在类中实现INotifyPropertyChanged,并通过PropertyChanged事件使属性的setter通知其更改,则重复实验后,您将看到TextBox正在更新。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接