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相关推荐
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
- Ethernet/IP 学习笔记三
Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- 吴恩达《机器学习》学习笔记三——多变量线性回归
吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
- Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装
扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...
- MYSQL学习笔记三:日期和时间函数
MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...
- ROS学习笔记三:创建ROS软件包
,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...
最新文章
- R语言描述性统计分析:假设检验
- 4.2.2 磁盘调度算法
- rtsp服务器搭建_如何从“零”开始搭建直播平台
- 【kali】kali换了root权限后无法打开firefox浏览器
- python批量删除_Python批量删除只保留最近几天table的代码实例
- mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射
- quartus打开Simulator Tool生成网表进行功能仿真
- maven插件打包exec_Exec Maven插件–从Maven Build运行Java程序
- 一张图学会Python3的基本用法
- vs窗体应用程序c语言,使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)...
- 计数器—verilog
- RQNOJ愚蠢的矿工
- 并联串联混合的电压和电流_电子电路基础,教你看懂电子电路,简单的串并联...
- ES选举:Elasticsearch中Master选举完全解读
- 【历史上的今天】2 月 9 日:世界上第一位计算机科学博士出生;微软发布 Surface Pro;Google Buzz 问世
- 头条校招(今日头条2017秋招真题)
- 打开网页报错:net::ERR_CONTENT_LENGTH_MISMATCH,网页打开时显示不全,需要刷新几次才行
- Android 反编译资料
- zip() 和zip(*)
- Golang 在nbsp;Baidu-FrontEnd 的应用之路