一、遇到问题

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

 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.csdn.net/download/u012046379/10308565,有兴趣可以下载。

欢迎批评交流

相关文章:

  • 2019-01-09
  • 2021-06-30
  • 2022-12-23
  • 2022-12-23
  • 2021-07-18
  • 2021-06-24
猜你喜欢
  • 2021-08-02
  • 2022-12-23
  • 2022-03-04
  • 2022-12-23
  • 2021-11-12
  • 2021-09-27
相关资源
相似解决方案