当我进一步深入研究 MVVM 和 MVVM-light 时,我认识到,MVVM-light 没有为模型提供基类。

但根据我的理解,消息传递和发出通知也可能发生在模型中。至少在模型之间的通信中,我发现消息传递会非常方便。

因此,我决定从 ViewModelBase 派生我的模型,即使某些属性(如设计时属性)将不会被使用。

但我越看这个,就越觉得我错过了一些东西。从 ViewModelBase 派生我的模型是否被认为是“不好的做法”?

使用消息传递进行模型通信可以吗?

有帮助吗?

解决方案

从您喜欢的任何内容派生您的视图模型类......MVVM-light 提供了 VieWModelBase 来提供 ICleanUp 的实现 - 这有利于管理 ViewModel 对象的生命周期。我自己的选择是在基类中实现属性更改通知的所有脚手架,然后从模型类中派生。我对模型类的唯一强烈建议是:

  1. 一旦尺寸不适合所有尺寸. 。存储数据的方式可能与与数据交互的方式不同,ViewModel 对象应该面向支持交互,而不是存储,如果您需要以两种截然不同的方式与相同的数据(模型)交互,那么设计两种不同的 ViewModel 来支持这些不同的交互。
  2. 一定要使用属性 (a la System.ComponentModel)来注释模型。您可以通过这种方式完成大量验证工作 - 并且验证 反馈 是表示层(View + ViewModel)的责任,而不是问题域(即该模型)。

真正好的 ViewModel 类通常也是无状态的,可以在单个用户交互中回收/重用,这样可以虚拟化大数据列表(WPF 支持虚拟化)以节省 RAM。

记住 DRY(不要重复自己)、KISS(保持简单,愚蠢!)和 YAGNI(你不会需要它)——是您应该牢记的原则 多于 任何学术设计原则。我确实在 WPF 应用程序上浪费了数周时间来实现学术上完美的 MVC/MVVM 模式,却发现它们降低了最终解决方案的整体可理解性。所以...把事情简单化!:)

其他提示

我想看看在复合应用程序库EventAggregator。在这个职位的答案有它的一个很好的说明。杰里米米勒的帖子进入一点的更多细节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top