MVVM Light中的Message

比喻:像漂流瓶一样发送一个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

你可能感兴趣的:(message)