Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我们自己的代码是否应该订阅PropertyChanged?_C#_Wpf_Events_Inotifypropertychanged - Fatal编程技术网

C# 我们自己的代码是否应该订阅PropertyChanged?

C# 我们自己的代码是否应该订阅PropertyChanged?,c#,wpf,events,inotifypropertychanged,C#,Wpf,Events,Inotifypropertychanged,我们有许多数据对象实现INotifyPropertyChanged以允许WPF绑定更新。还有许多地方我们的代码订阅PropertyChanged,因为我们对一些值更新感兴趣 这导致了非常难看的代码,我们需要检查哪些属性实际发生了更改(我们使用表达式来执行此操作,因此它始终是类型/重构安全的) 当我们想要订阅某个特定的事件时,是首选引发该事件(PriceChanged等),还是挂接PropertyChanged并检查属性名称?如果您想要订阅的属性数量不是很大,我会创建专用事件,因为它们在可读性和可

我们有许多数据对象实现INotifyPropertyChanged以允许WPF绑定更新。还有许多地方我们的代码订阅PropertyChanged,因为我们对一些值更新感兴趣

这导致了非常难看的代码,我们需要检查哪些属性实际发生了更改(我们使用表达式来执行此操作,因此它始终是类型/重构安全的)


当我们想要订阅某个特定的事件时,是首选引发该事件(PriceChanged等),还是挂接PropertyChanged并检查属性名称?

如果您想要订阅的属性数量不是很大,我会创建专用事件,因为它们在可读性和可发现性方面更好


然而,如果有相当多的属性,答案就不那么明显了。我通常通过应用模式(订阅模型更改而不是ViewModel)来避免这种情况。它可以帮助我保持虚拟机精简。

暂且不提,如果您使用自己的事件,则始终可以添加一个
bool
来表示值是否实际更改或是否刚刚写入。您还可以将before和after值作为事件包的一部分提供。