zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    iOS 适配iPhoneX上tableHeaderView发生了高度拉伸、UI出现的空白间距
    无线加密WEP、WPA、WPA2及TKIP、AES
    字符替换操作
    jQuery版本升级问题汇总
    ipv6服务器及环境搭建
    git删除某次提交操作
    五种IO模型
    jQuery1.6以上attr改用prop
    线程创建pthread_create用法(转)
    网络字节序与主机字节序
  • 原文地址:https://www.cnblogs.com/cw_volcano/p/3614798.html
Copyright © 2011-2022 走看看