MVVM Light学习笔记(三):Messenger
本篇介紹MvvmLight中一個重要的東東,那就是Messenger.
(一)Messenger的基本組成
Messenger類用于應用程序的通信,接受者只能接受注冊的消息類型,另外目標類型可以被指定,用Send<TMessage, TTarget>(TMessage message)實現,在這種情況下信息只能被傳遞如果接受者類型和目標參數類型匹配,message可以是任何簡單或者復雜的對象,你可以用特定的消息類型或者創建你自己的類型繼承自他們
(1)MessageBase:簡單的消息類,攜帶可選的信息關于消息發布者的
(2)GenericMessage<T>:范型消息
(3)NotificationMessage: 用于發送一個string類型通知給接受者
(4)NotificationMessage<T>:和上面一樣是一個,且具有泛型功能。
(5)NotificationMessage:向接受者發送一個通知,允許接受者向發送者回傳消息
(6)NotificationMessageAction<T>:NotificationMessage的泛型方式
(7)DialogMessage:發送者(通常是View)顯示對話,并且傳遞調用者得回傳結果(用于回調),接受者可以選擇怎樣顯示對話框,可以使是標準的MessageBox也可也是自定義彈出窗口
(8)PropertyChangedMessage<T>:用于廣播一個屬性的改變在發送者里,和PropertyChanged事件有完全箱體內各的目的,但是是一種弱聯系方式
(二)Messenger的案例演示。
??? 下面用一個簡單的列子講解下Messenger的用法,在實例中,有兩個窗口,一個是顯示產品詳細信息MainWindow.xaml,另一個是EditDetailView.xaml,通過選擇MainWindow窗口中的任意產品,能在EditDetailView窗口顯示,如果在EiditDetailView中修改產品的數量,可以將修改的結果立即呈現到MainWindow中。
?
原理淺析:發布者通過Messenger.Default.Send<T>發布某個類型消息,而接受者通過?Messenger.Default.Register<T>注冊相應的消息類型,從而實現接受消息
主要代碼如下:
發送者,代碼片段
SelectedProductCommand = new RelayCommand(() =>{
if (Products.CurrentItem != null)
{
//獲取當前選中列
Product selectedProduct = (Product)Products.CurrentItem;
//消息的發送
//(1)如果我們只需要接受者接受消息,用下面的方式就可以了
//發布消息 另一種寫法Messenger.Default.Send<Product>(selectedProduct);
Messenger.Default.Send(selectedProduct);
//(2)如果我們需要接受者返回消息,還需要下面的代碼
//發布消息,接受者可以通過NotificationMessageAction<Product> 的實例lastProduct的Excute()方法返回消息到接受者
Messenger.Default.Send(new NotificationMessageAction<Product>("當前選擇的產品是:" + selectedProduct.Description, FromEditViewModelCallBack));
}
}
);
接受者,主要代碼片段
public EditDetailViewModel(){
//消息的接受
//(1)如果我們只是接受消息,不返回消息,只需要下面的代碼
Messenger.Default.Register<Product>(this, m => FromMainWindowProduct= m);
//(2)如果我們還需要向發送者返回消息,我們需要將如下代碼,獲取 NotificationMessageAction<Product> lastProduct實例
Messenger.Default.Register<NotificationMessageAction<Product>>
(this, m =>
{
ShowMessage= m.Notification;
lastProduct = m;
}
);
SaveCommand = new RelayCommand(() =>
{
//處理來至發送者的消息,并返回消息到發送者
lastProduct.Execute(product);
}
);
}
源代碼下載
轉載于:https://www.cnblogs.com/Joetao/articles/2119610.html
總結
以上是生活随笔為你收集整理的MVVM Light学习笔记(三):Messenger的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Aspx页面生命周期(转)
- 下一篇: 如何理解IIS 7的两种应用程序池的管道