本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的使用事件聚合器实现模块间的通信
一.事件聚合器#
在上一篇 .NET Core 3 WPF MVVM框架 Prism系列之模块化 我们留下了一些问题,就是如何处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯,且彼此之间没有之间引用,这就实现了模块之间低耦合的通信方式,下面引用官方的一个事件聚合器模型图:
二.创建和发布事件#
1.创建事件#
首先我们来处理同模块不同窗体之间的通讯,我们在PrismMetroSample.Infrastructure新建一个文件夹Events,然后新建一个类PatientSentEvent,代码如下:PatientSentEvent.cs:
Copypublic class PatientSentEvent: PubSubEvent{}
2.订阅事件#
然后我们在病人详细窗体的PatientDetailViewModel类订阅该事件,代码如下:PatientDetailViewModel.cs:
Copy public class PatientDetailViewModel : BindableBase { IEventAggregator _ea; IMedicineSerivce _medicineSerivce; private Patient _currentPatient; //当前病人 public Patient CurrentPatient { get { return _currentPatient; } set { SetProperty(ref _currentPatient, value); } } private ObservableCollection _lstMedicines; //当前病人的药物列表 public ObservableCollection lstMedicines { get { return _lstMedicines; } set { SetProperty(ref _lstMedicines, value); } } //构造函数 public PatientDetailViewModel(IEventAggregator ea, IMedicineSerivce medicineSerivce) { _medicineSerivce = medicineSerivce; _ea = ea; _ea.GetEvent().Subscribe(PatientMessageReceived);//订阅事件 } //处理接受消息函数 private void PatientMessageReceived(Patient patient) { this.CurrentPatient = patient; this.