比喻:像漂流瓶一样发送一个Message,任何人有兴趣就可以拾起来。
MVVM Light中的Message的使用分为三个步骤:
1.创建一个类,包含要传递的Message。
2.在ViewModel中,实例化这个Message类并广播这个Message。
3.在MainPage.xaml.cs中注册此Message并在接收到的时候处理它。
在项目中创建一个新Class,命名为GoToPageMessage.
1: using System; 2: 3: namespace MvvmLightNavigationBehaviorAndMessages 4: { 5: public class GoToPageMessage 6: { 7: public string PageName { get; set; } 8: } 9: }
返回MainViewModel.cs并移除GoToPage2方法。创建一个GoToPageMessage的实例(初始化你要导航的页面名称),并使用Messager对象来广播此Message,如下所示:
1: private object GoToPage2() 2: { 3: var msg = new GoToPageMessage() { PageName = "Page2" }; 4: Messenger.Default.Send<GoToPageMessage>( msg ); 5: return null; 6: }
需要引用以下命名空间:
1: using GalaSoft.MvvmLight.Messaging;
这样就广播了Message,剩下的就是注册一个收件人和响应这个Message。要做到这一点,返回MainPage.xaml.cs,在构造函数或MainPage_Loaded函数中注册Message:
1: Messenger.Default.Register<GoToPageMessage> 2: ( 3: this, 4: ( action ) => ReceiveMessage( action ) 5: );
你需要添加Messaging的声明。
ReceiveMessage是你要写的一个方法,用来实现导航。
1: private object ReceiveMessage( GoToPageMessage action ) 2: { 3: StringBuilder sb = new StringBuilder( "/Views/" ); 4: sb.Append( action.PageName ); 5: sb.Append( ".xaml" ); 6: NavigationService.Navigate( 7: new System.Uri( sb.ToString(), 8: System.UriKind.Relative ) ); 9: return null; 10: }
Build程序并运行,点击MainPage的按钮将导航到Page2.
第三步的简写:
Messenger.Default.Register<StopRequestMessage>(this, (new Action<StopRequestMessage>(x => { if (x.IsStopped) { //output result report RedemptionTransactionReport(); } })));
最后回收:
Messenger.Default.Unregister(this);
类似文章参考:http://blog.csdn.net/duanzilin/article/details/6385151