1. 程式人生 > >WPF之View、ViewModel之間的相互互動(二)

WPF之View、ViewModel之間的相互互動(二)

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