本篇介绍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相关推荐

  1. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  2. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  3. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  4. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  5. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  6. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  7. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装

    扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...

  8. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  9. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

最新文章

  1. R语言描述性统计分析:假设检验
  2. 4.2.2 磁盘调度算法
  3. rtsp服务器搭建_如何从“零”开始搭建直播平台
  4. 【kali】kali换了root权限后无法打开firefox浏览器
  5. python批量删除_Python批量删除只保留最近几天table的代码实例
  6. mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射
  7. quartus打开Simulator Tool生成网表进行功能仿真
  8. maven插件打包exec_Exec Maven插件–从Maven Build运行Java程序
  9. 一张图学会Python3的基本用法
  10. vs窗体应用程序c语言,使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)...
  11. 计数器—verilog
  12. RQNOJ愚蠢的矿工
  13. 并联串联混合的电压和电流_电子电路基础,教你看懂电子电路,简单的串并联...
  14. ES选举:Elasticsearch中Master选举完全解读
  15. 【历史上的今天】2 月 9 日:世界上第一位计算机科学博士出生;微软发布 Surface Pro;Google Buzz 问世
  16. 头条校招(今日头条2017秋招真题)
  17. 打开网页报错:net::ERR_CONTENT_LENGTH_MISMATCH,网页打开时显示不全,需要刷新几次才行
  18. Android 反编译资料
  19. zip() 和zip(*)
  20. Golang 在nbsp;Baidu-FrontEnd 的应用之路

热门文章

  1. 多进程多线程GDB调试 (转)
  2. 关于Python中的self
  3. cocos2dx 自定义动画
  4. jquery防止冒泡
  5. Django之路--第一篇
  6. SQLServer存储引擎——05.索引的结构和分类
  7. timeSetEvent
  8. mysq对存在null值的字段排序
  9. check $m2_home environment variable and mvn script match
  10. fastjson解析json简介