模型之间的 MVVM Light Messenger > ViewModel 通信
本文关键字:ViewModel 通信 Messenger Light 之间 MVVM 模型 | 更新日期: 2024-11-08 11:28:40
我注意到 MVVM Light 框架中 ViewModelBase 的每个子级都可以覆盖构造函数
public ViewModelBase(IMessenger messenger)
当模型更改时,使用IMessenger进行模型到视图模型的通信并更新视图模型是否可以(从架构上讲)可以吗?
这意味着每个模型都有自己的IMessenger实例,每个viewModel都会订阅这些消息。
现在我正在使用这样的界面
public interface IModel
{
event EventHandler<ModelStatusChangedArgs> StatusChanged;
}
对于每个模型,这有点...痛苦,我觉得我做错了什么。
从技术上讲,您可以在不知道谁可能会听或对该事件感兴趣的每种情况下使用它。
但是MVVM Light是一个MVVM框架,它实际上用于允许ViewModels的松散耦合。在模型中使用它最终会将模型绑定到 MVVM 框架。
但是没有什么可以阻止您编写自己的事件聚合器/消息传递系统(即域事件)。您还可以通过围绕 MVVM Light 的信使实现包装器,从 ViewModel 中删除 Messanger 依赖项。
您通常希望保留此"层"依赖项:
- 您的基础架构(ASP.NET、持久性)应取决于您的域/业务层
- 您的业务层不应依赖于任何其他层。这包含应用程序的核心及其所有域逻辑(业务规则/逻辑)
- 您的应用层(ViewModels)仅取决于您的域/业务层。视图模型仅包含表示逻辑
- 您的表示层(视图)仅取决于您的视图模型。视图应不知道业务层(MVVM 中的模型)。
MVVM框架驻留在"应用层",模型不应该意识到它。