WPF在MVVM模式下 ViewModel通讯
一、遇到问题
一般情况下我们可能会遇到当一个界面上的数据显示发生变化,可能通知其他界面,让其他界面上的数据或显示也发生变化。通常包括以下几种情况:
1.主界面通知子界面
2.子界面通知主界面
3.子界面通知子界面
二、实现方案
1.方案1
很容易想到的方案是:在一个ViewModel(vm1)中定义一个事件,然后另一个ViewModel(vm2)中订阅vm1中的事件。当事发生的时候通知vm2。简单实现如下:
vm1中定义事件
vm2中添加处理事件的方法
主窗体中订阅事件
这样之后就基本实现了这个功能。那么当其他窗体也需要知道这个事件的时候,增加相应的订阅就可以了
2.方案2
在prism框架中已经提供了方案来实现ViewModel之间通讯的功能,就是利用事件聚合。
我的示例中用的是Prism6.3,不同版本之间实现有差别。
首先定义自己的事件
配置IOC容器和ServiceLocator
vm2中订阅事件
vm1中命令中发布事件
示例代码已上传至:https://download.****.net/download/u012046379/10308565,有兴趣可以下载。
欢迎批评交流