WPF之View、ViewModel之間的相互互動(二)
阿新 • • 發佈:2018-12-10
1、Messager互動結構和訊息型別
銜接上篇,Messeger是信使的意思,顧名思義,他的目是用於View和ViewModel 以及 ViewModel和ViewModel 之間的訊息通知和接收。
Messenger類用於應用程式的通訊,接受者只能接受註冊的訊息型別,另外目標型別可以被指定,用Send<TMessage, TTarget>(TMessage message)實現,在這種情況下資訊只能被傳遞如果接受者型別和目標引數型別匹配,
message可以是任何簡單或者複雜的物件,你可以用特定的訊息型別或者建立你自己的型別繼承自他們。
互動結構如下所示:
訊息型別如下表所示:
message訊息物件型別 | 說明 |
MessageBase | 簡單的訊息類,攜帶可選的資訊關於訊息釋出者的 |
GenericMessage<T> | 泛型訊息 |
NotificationMessage | 用於傳送一個string型別通知給接受者 |
NotificationMessage<T> | 和上面一樣是一個,且具有泛型功能 |
NotificationMessage | 向接受者傳送一個通知,允許接受者向傳送者回傳訊息 |
NotificationMessageAction<T> | NotificationMessage的泛型方式 |
DialogMessage | 傳送者(通常是View)顯示對話,並且傳遞呼叫者得回傳結果(用於回撥),接受者可以選擇怎樣顯示對話方塊,可以使是標準的MessageBox也可也是自定義彈出視窗 |
PropertyChangedMessage<T> | 用於廣播一個屬性的改變在傳送者裡,和PropertyChanged事件有完全箱體內各的目的,但是是一種弱聯絡方式 |
2、註冊訊息的模式
上篇給出了註冊的方法,但是註冊可以有很多種方式,最常見的就是命名方法呼叫和Lambda表示式呼叫的方式:
2.1、基本的命名方法註冊
// 使用命名方法進行註冊
Messenger.Default.Register<String>(this, HandleMessage);
//解除安裝當前(this)物件註冊的所有MVVMLight訊息
this.Unloaded += (sender, e) => Messenger.Default.Unregister(this);
private void HandleMessage(String msg)
{
//Todo
}
2.2、使用 Lambda 註冊
Messenger.Default.Register<String>(this, message => {
// Todo
});
//解除安裝當前(this)物件註冊的所有MVVMLight訊息
this.Unloaded += (sender, e) => Messenger.Default.Unregister(this);
參考部落格:https://www.cnblogs.com/wzh2010/p/6689423.html