WPF在MVVM模式下 ViewModel通讯

一、遇到问题

      一般情况下我们可能会遇到当一个界面上的数据显示发生变化,可能通知其他界面,让其他界面上的数据或显示也发生变化。通常包括以下几种情况:

 1.主界面通知子界面

 2.子界面通知主界面

 3.子界面通知子界面

WPF在MVVM模式下 ViewModel通讯

二、实现方案

     1.方案1

      很容易想到的方案是:在一个ViewModel(vm1)中定义一个事件,然后另一个ViewModel(vm2)中订阅vm1中的事件。当事发生的时候通知vm2。简单实现如下:

vm1中定义事件

WPF在MVVM模式下 ViewModel通讯

vm2中添加处理事件的方法

WPF在MVVM模式下 ViewModel通讯

主窗体中订阅事件

WPF在MVVM模式下 ViewModel通讯

这样之后就基本实现了这个功能。那么当其他窗体也需要知道这个事件的时候,增加相应的订阅就可以了

2.方案2

在prism框架中已经提供了方案来实现ViewModel之间通讯的功能,就是利用事件聚合。

我的示例中用的是Prism6.3,不同版本之间实现有差别。

 首先定义自己的事件

WPF在MVVM模式下 ViewModel通讯

配置IOC容器和ServiceLocator

WPF在MVVM模式下 ViewModel通讯

vm2中订阅事件

WPF在MVVM模式下 ViewModel通讯

vm1中命令中发布事件

WPF在MVVM模式下 ViewModel通讯

示例代码已上传至:https://download.****.net/download/u012046379/10308565,有兴趣可以下载。

欢迎批评交流