繁体   English   中英

C# MVVM Model 图形消息中介或 INotifyPropertyChanged?

[英]C# MVVM Model Graph Message Mediator or INotifyPropertyChanged?

我正在开发一个 C# MVVM WPF 应用程序,并且在决定是否应该为我的 UI“实时”更改通知 ZA559B87068921EEC05086CE5458 使用消息中介模式还是简单的 INotifyPropertyChanged 时遇到问题。 特别是问题是我的 model 表示一个包含许多“活动”对象的图,这些对象都具有不同的视图模型在某个时候会对更改感兴趣的属性。 我有大约 3-5 个视图模型处于活动状态,需要通知 model 更改。 一些变化可能嵌套在模型“孙子”的深处。

我尝试比较两种消息传递技术、中介模式和 INotifyPropertyChanged,并认为中介更适合不同模块/系统之间的更改通知。 我的视图模型在初始化时肯定需要 model 的初始值,然后再更改通知。 在我的情况下,INotifyPropertyChanged 似乎是最佳选择,但我有点怀疑,因为我认为很多 nameof(e.PropertyName) 开关情况不是很优雅。 这个问题有更好的选择吗?

与这种情况的典型情况一样,您可以有两种方式。 您显然无法避免使用INotifyPropertyChanged ,因为这是处理基于 MVVM 的数据绑定的 WPF 方式,因此您的所有视图模型将至少是此接口的基本实现。

我怀疑你可能只需要两者。 我不建议在您的 model 中使用基于INotifyPropertyChanged的模式。 创建此接口的原因是将观察者模式基于作为字符串的实际属性名称。 这几乎是一条“单行道”,因为XAML是支持 WPF 的典型“设计”语言,以“字符串”方式解析,几乎没有有效的替代方案。 以我的拙见,您几乎没有理由要在整个 model 中强制通知像这种情况一样弱类型(实际上是字符串类型),所以我建议避免INotifyPropertyChanged如果你有一个相对庞大的域 Model。

消息传递可能是通向 go 的方法,使用消息类型注册等保持强类型化,除非您想考虑其他替代方案,例如简单的 C# 事件,或者甚至将两者结合起来。 在此过程中,尽量坚持并坚持层次结构和封装,但也要尽可能弱*。

(*我的意思是,如果您的某些域对象达到多个嵌套级别,那么有时绕过层次结构并让孙子孙辈发送自己的消息而不是通知他们父母的父母可能更实际通过事件,然后让这些父母的父母发送相应的通知消息。在典型的 OOP 编程中,妥协不断地权衡实用性和时间可用性)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM