【MVVM Light】Messager的使用
一、前言
在MVVM编程的模式中,有时候我们会遇到一个很尴尬的情况:
若干个xaml.cs都复用一个ViewModel,当ViewModel想传递一个特定的消息给某一个xaml.cs的时候,我们该怎么做?
或者当一个.cs不方便在另一个.cs文件中new出来使用,但是我确实想传递消息给那个.cs,该怎么办?
今天就说说MVVM Light中的Messager类,它继承自IMessager接口。
二、使用方法
发送页面中:
Messenger.Default.Send<TMessage>(TMessage message); //第一种方法 Messenger.Default.Send<TMessage>(TMessage message, object token);//第二种方法 Messenger.Default.Send<TMessage, TTarget>(TMessage message);//第三种方法
一般来说用第一种就足已:(里面的T可以是各种类型)
我这里this是传的页面本身,可以自己决定传当前页面的特有部分: this.your_property 或者 this.your_method等等
Messenger.Default.Send<GenericMessage<T>>(new GenericMessage<T>(this, value));
接收页面中:
Messenger.Default.Register<GenericMessage<T>>(this, Your_Action); private void Your_Action(GenericMessage<T> msg)
{
// do with msg
}
msg会包含发送页面的value,这样我就可以对msg进行相关的处理。
三、各种情况
一个发送页面,一个页面接收时: 即第二部分的例子
一个发送页面,多个页面接收时: 在各自的接收页面中需要对msg进行过滤,获取该接收页面需要的消息。
多个发送页面,多个页面接收时: 每个发送页面可以设定T,即消息的类型,只要接收页面在Register的时候用对应的类型即可接收到自己想要的Send页面。
四、总结
在MVVM中其实还是少用这些Messager类,它会使代码显得不具有可读性,又使程序的代码布局显得不清晰。因为你在一个页面中使用Messager.Default.Send时,其他人看你代码是不方便找到在哪里Register的。它不像我们平时两个页面只要引用一下就可以F12快速的跟踪过去。只有在你实在没办法的时候再去考虑Messager类。
【MVVM Light】Messager的使用的更多相关文章
- MVVM Light中的Message
比喻:像漂流瓶一样发送一个Message,任何人有兴趣就可以拾起来. MVVM Light中的Message的使用分为三个步骤: 1.创建一个类,包含要传递的Message. 2.在ViewModel ...
- MVVM Light须要注意的10个问题
MVVM Light须要注意的10个问题 从使用XAML技术基础開始(实际上并非非常久曾经).我便关注MVVM(Model – View – ViewModel)模式.偶然接触到MVVM Light不 ...
- [MVVM Light]Messenger 的使用
原文:[MVVM Light]Messenger 的使用 当我们使用MVVM开发模式进行开发时,ViewModel之间的通信常常是很头疼的事情,好在MVVM Light提供了Messenger类可以轻 ...
- Mvvm Light Toolkit 入门
原文:Mvvm Light Toolkit 入门 前言 之前学习UWP的时候就一直看到有关MVVM的资料但是一直没有系统的去学,最近正好有时间,特地来攻破这个点,顺便学习一下VS与GitHub的链接和 ...
- 【MVVM Light】新手初识MVVM,你一看就会
一.前言 作为一个初入软件业的新手,各种设计模式与框架对我是眼花缭乱的.所以当我接触到这些新知识的时候就希望自己能总结几个步骤,以便更好更方便的在日常工作中进行使用. MVVM顾名思义就是Model- ...
- MVVM Light 一个窗口承载两个视图
MVVM Light 一个窗口承载两个视图 原文地址:http://www.codeproject.com/Articles/323187/MVVMLight-Using-Two-Views 本文 ...
- Mvvm Light Toolkit for WPF/Silverlight系列之搭建mvvmlight开发框架
Mvvm Light Toolkit for WPF/Silverlight系列之搭建mvvmlight开发框架 本章节,我将通过示例介绍如何搭建mvvmlight开发环境.示例中的我会针对wpf ...
- MVVM Light 笔记
4.关于子视图, MVVMLight Using Two Views:http://www.codeproject.com/Articles/323187/MVVMLight-Using-Two-Vi ...
- MVVM Light 新手入门(1):准备阶段
1.新建WPF空白项目. 2.NuGet 程序包中安装 3.根据MVVM分层结构,建立包含Model.View.ViewModel三层文件夹 如图: 1.View负责前端展示,与ViewModel进行 ...
随机推荐
- OVS 中的各种网络设备 - 每天5分钟玩转 OpenStack(128)
上一节我们启用了 Open vSwitch,本节将查看当前的网络状态并介绍 Open vSwitch 涉及的各种网络设备 初始网络状态 查看一下当前的网络状态. 控制节点 ifconfig 显示控制节 ...
- 如何在ASP.Net创建各种3D图表
我们都知道,图表在ASP.NET技术中是一种特别受欢迎而又很重要的工具.图表是表示数据的图形,一般含有X和Y两个坐标轴.我们可以用折线,柱状,块状来表示数据.通过图表控件,我们即能表示数据又能比较各种 ...
- PHP之购物车的代码
该文章记录了购物车的实现代码,仅供参考 book_sc_fns.php <?php include_once('output_fns.php'); include_once('book_fns. ...
- 修改session垃圾回收几率
<?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...
- R abalone data set
#鲍鱼数据集aburl <- 'http://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data' ab ...
- 如何解决流程开发中SheetRadioButtonList页面取值问题
分享一个常见的取值问题. 应用场景: SheetRadioButtonList控件,点击其中一项执行事件操作.如果是页面加载的情况下,值就无法取到. 具体原因如下: 我给SheetRadioButto ...
- iOS开源项目周报1229
由OpenDigg 出品的iOS开源项目周报第三期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. Ma ...
- SQL*Plus生成html文件
最近使用SQL*Plus命令生成html文件,遇到一些有意思的知识点,顺便记录一下,方便以后需要的时候而这些知识点又忘记而捉急.好记性不如烂笔头吗! 为什么要用SQL*Plus生成html文件? ...
- 【python之路4】循环语句之while
1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...
- C++的性能C#的产能?! - .Net Native 系列五:.Net Native与反射
此系列系小九的学堂原创翻译,翻译自微软官方开发向导,一共分为六个主题.本文是第五个主题:.Net Native与反射. 向导文链接:<C++的性能C#的产能?! - .Net Native 系列 ...