01
—
前言
處理同模塊不同窗體之間的通信和不同模塊之間不同窗體的通信,Prism提供了一種事件機制,可以在應用程序中低耦合的模塊之間進行通信,該機制基於事件聚合器服務,允許發布者和訂閱者之間通過事件進行通訊,且彼此之間沒有引用,這就實現了模塊之間低耦合的通信方式。簡單來說就是提供了一個多播發布/訂閱功能。Prism的事件聚合器,這玩意實現原理是觀察者模式,觀察者模式也就是常說的發布/訂閱模式。
02
—
創建事件
這里我們創建一個公共接口類PersonInfoEven並繼承自PubSubEvent,並傳入一個PersonInfo對象
public class PersonInfo { public string Name { get; set; } public int Age { get; set; } public string Sex { get; set; } public override string ToString() { string report = $"[Name] = [{Name}],[Age] = [{Age}],[Sex] = [{Sex}]"; return report; } } public class PersonInfoEven : PubSubEvent<PersonInfo> { }
03
—
訂閱事件
IEventAggregator eventAggregator;定義事件聚合器
然后獲取事件聚合器實例
this.eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
並通過IEventAggregator的GetEvent獲取定義的消息,再通過Subscribe方法注冊,Subscribe是一個委托方法
eventAggregator.GetEvent<PersonInfoEven>().Subscribe(ShowNews);
private void ShowNews(PersonInfo obj) { TxtLabel = $"{obj.ToString()}"; }
04
—
發布事件
//創建一個命令,當執行該命令時執行發布事件的邏輯 PubSubEventCommand = new DelegateCommand(PubSubEventMessage); //發布事件方法 private void PubSubEventMessage() { eventAggregator.GetEvent<PersonInfoEven>().Publish(new PersonInfo() {Name ="zyr",Age = 18,Sex = "nan" }); }
這樣,一個發布/訂閱的事件就完成了,也可以在任何時候取消事件注冊,只需要調用Unsubscribe方法即可
eventAggregator.GetEvent<PersonInfoEven>().Unsubscribe(ShowNews);//解除訂閱
由於它是多播的,你可以在任意多個地方進行發布或訂閱。
05
—
效果演示
06
—
源碼
鏈接:https://pan.baidu.com/s/1H3HtTRAZVS-FlReTe00yxQ
提取碼:添加小編微信zls20210502獲取
技術群: 需要進技術群的添加小編微信zls20210502 ,備注:加群;
07
—
經典回顧
往期推薦
C# WPF mvvm模式下combobox綁定(list<enum>、Dictionary<int,string>)
C# WPF Caliburn.Micro框架下利用Mef加載其它項目界面
C# datagridview、datagrid、GridControl增加行號