當前位置: 妍妍網 > 碼農

C# WPF MVVM模式Caliburn.Micro框架下事件釋出與訂閱

2024-02-07碼農

01

前言

處理同模組不同表單之間的通訊和不同模組之間不同表單的通訊,Caliburn提供了一種事件機制,可以在應用程式中低耦合的模組之間進行通訊,該機制基於事件聚合器服務,允許釋出者和訂閱者之間透過事件進行通訊,且彼此之間沒有參照,這就實作了模組之間低耦合的通訊方式。 簡單來說就是提供了一個多播釋出/訂閱功能。 Caliburn的事件聚合器,這玩意實作原理是觀察者模式,觀察者模式也就是常說的釋出/訂閱模式。

02


建立事件

這裏我們建立一個公共介面類 PersonInfoEven 並繼承自PubSubEvent,並傳入一個 PersonInfo 物件

public classPersonInfo {publicstring Name { get; set; }publicint Age { get; set; }publicstring Sex { get; set; }publicoverridestringToString() {string report = $"[Name] = [{Name}],[Age] = [{Age}],[Sex] = [{Sex}]";return report; } }public classPersonInfoEven : PersonInfo { }

03


訂閱事件

IEventAggregator eventAggregator;定義事件聚合器

然後透過ioc獲取事件聚合器例項

this.eventAggregator = IoC.Get<IEventAggregator>();

註意需要繼承介面IHandle<PersonInfoEven>

classStartViewModel : Caliburn.Micro.Screen, IShell,IHandle<PersonInfoEven>

然後訂閱

this.eventAggregator.Subscribe(this);

publicvoidHandle(PersonInfoEven message) { System.Windows.MessageBox.Show(message.ToString()); }

04


釋出事件

可以選擇同步釋出或者異步釋出:

IEventAggregator eventAggregator;publicvoid EventTest() {this.eventAggregator = IoC.Get<IEventAggregator>();//方法1 同步ui釋出事件//this.eventAggregator.PublishOnUIThread(new PersonInfoEven() { Name = "ZYR",Age=18,Sex ="man"});//方法2 開執行緒去釋出this.eventAggregator.Publish(new PersonInfoEven() { Name = "ZYR", Age = 18, Sex = "man" }, action => {//方式①//Task.Factory.StartNew(action);//方式② Task.Run(action); }); }

這樣,一個釋出/訂閱的事件就完成了,也可以在任何時候取消事件註冊,只需要呼叫Unsubscribe方法即可

由於它是多播的,你可以在任意多個地方進行釋出或訂閱。

05


效果演示

06


技術群: 添加小編微信並備註進群

小編微信:mm1552923

公眾號:dotNet編程大全

07


經典回顧

因為公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下「贊」和「在看」,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。點選「贊」和「在看」支持我們吧!


往期推薦