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