模型之间的MVVM Light Messenger - > ViewModel通信

时间:2015-03-09 16:47:38

标签: c# mvvm mvvm-light

我注意到MVVM Light框架中ViewModelBase的每个子代都可以覆盖构造函数

public ViewModelBase(IMessenger messenger)

(架构说)是否可以使用IMessenger建模到ViewModel通信并在模型更改时更新ViewModels?

这意味着每个Model都有自己的IMessenger实例,每个viewModel都会订阅这些消息。

现在我正在使用这样的界面

public interface IModel
{
  event EventHandler<ModelStatusChangedArgs> StatusChanged;
}

并且每种模型都有点......痛苦,我觉得我做错了。

1 个答案:

答案 0 :(得分:1)

从技术上讲,你可以在任何你不知道谁可能会倾听或对此事件感兴趣的情况下使用它。

但是MVVM Light是一个MVVM框架,它实际上用于允许ViewModel的松散耦合。在模型中使用它最终会将模型绑定到MVVM框架。

但没有任何东西可以阻止您编写自己的Event Aggregator / Messaging系统(即Domain Events)。您还可以通过在MVVM Light的信使周围实现包装来从ViewModel中删除Messanger依赖项。

您通常希望保留此“图层”依赖项:

  • 您的基础架构(ASP.NET,持久性)应该依赖于您的域/业务层
  • 您的业务层不应该依赖任何其他图层。这包含应用程序的核心及其所有域逻辑(业务规则/逻辑)
  • 您的应用层(ViewModels)仅取决于您的域/业务层。 ViewModels仅包含Presentation Logic
  • 您的表示层(视图)仅取决于您的ViewModel。视图应该不知道业务层(MVVM中的模型)。

MVVM框架位于“应用层”中,模型不应该知道它。