MvvmLight Messenger(信使)
MvvmLight信使需要三个部分:
1、自定义信件类,普通的Model,供在发布者和订阅者之间传递信息用。
2、发布,通常是在某一事件函数中进行发布,Messenger.Default.Send
3、订阅,Messenger.Default.Register
命名空间:GalaSoft.MvvmLight.Messaging
用途:ViewModel之间通信、ViewModel和View之间通信
下面是ViewModel之间通信的例子:使用TextBox控制MainWindow的标题,如图

1、首先,新建信件类,起名TitleTextChangedMessenger(发布者为主动方,所以信件类名称以发布者为主)。
public class TitleTextChangedMessenger
{
public string NewText { get; set; } // 用做返回值
public string Result { get; set; }
}
2、新建MainViewModel类,TitleTextBoxViewModel类。
(如果选择在NuGet内完全安装MVVM Light,则会默认创建MainViewModel类)
public class MainViewModel : ViewModelBase
{
public MainViewModel()
{ // 订阅
Messenger.Default.Register<TitleTextChangedMessenger>(this, (messenger) =>
{
Title = messenger.NewText;
messenger.Result = "Success";
});
}
string _title;
public string Title
{
get { return _title; }
set
{
if (_title != value)
{
_title = value;
RaisePropertyChanged("Title");
}
}
}
}
public class TitleTextBoxViewModel : ViewModelBase
{
string _text;
public string Text
{
get { return _text; }
set
{
if (_text != value)
{
_text = value;
RaisePropertyChanged("Text");
TitleTextChangedMessenger messenger = new TitleTextChangedMessenger { NewText = _text }; // 发布
Messenger.Default.Send<TitleTextChangedMessenger>(messenger);
// 这里是为了验证发布&订阅方法的同步,由此可以知道信使可以返回结果,相当于函数调用的返回值
string result = messenger.Result;
}
}
}
}
3、前台代码。(其中DataContext的绑定使用Locator,由MVVM Light的ViewModelLocator定位)
<Window x:Class="MVVMLightTutorial.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="350" Width="525"
DataContext="{Binding Source={StaticResource Locator}, Path=Main}"
Title="{Binding Title}">
<Grid>
<TextBox DataContext="{Binding Source={StaticResource Locator}, Path=TitleTextBox}"
Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}"></TextBox>
</Grid>
</Window>
工程代码:MvvmLightMessengerTutorial.zip
初学WPF,文章仅为参考用,如果有错误,恳请指出!
MvvmLight Messenger(信使)的更多相关文章
- Messenger信使
* Messenger用于Activity和Service之间消息传递 需求:activity来绑定服务,绑定成功后,将数据发送给service,service收到消息后,再发送信息给activity ...
- MVVMLight - Messenger 2
本篇介绍MvvmLight中一个重要的东东,那就是Messenger. (一)Messenger的基本组成 Messenger类用于应用程序的通信,接受者只能接受注册的消息类型,另外目标类型可以被指定 ...
- MVVMLight - Messenger 1
Messenger Mvvm提倡View和ViewModel的分离,View只负责数据的显示,业务逻辑都尽可能放到ViewModel中, 保持View.xaml.cs中的简洁(没有任何代码,除了构造函 ...
- MvvmLight框架使用入门(一)
MvvmLight是比较流行的MVVM框架,相对较为简单易用.可能正因为简单,对应的帮助文档不多,对初学者就不够友好了.这里会用几篇随笔,就个人对MvvmLight的使用经验,来做一个入门的介绍. 第 ...
- MvvmLight框架使用入门(四)
本篇我们着重介绍ViewModelBase,演示Set和RaisePropertyChanged方法的使用,以及就Cleanup方法释放资源展开讨论. ICleanup 接口.实现该接口的ViewMo ...
- Android 进阶10:进程通信之 Messenger 使用与解析
读完本文你将了解: Messenger 简介 Messenger 的使用 服务端 客户端 运行效果 使用小结 总结 代码地址 Thanks 前面我们介绍了 AIDL 的使用与原理,这篇文章来介绍下 A ...
- 好玩的Handler
Android提供了Handler和Looper来满足线程间的通信; Handler和Activity的任务栈不同,它是先进先出原则; Handler:你可以构造Handler对象来与Looper沟通 ...
- Android总结篇系列:Android Service
Service通常总是称之为“后台服务”,其中“后台”一词是相对于前台而言的,具体是指其本身的运行并不依赖于用户可视的UI界面,因此,从实际业务需求上来理解,Service的适用场景应该具备以下条件: ...
- Android应用框架浅析
http://blog.csdn.net/yanbober/article/category/3206943 Android应用层View绘制流程与源码分析 http://blog.csdn.ne ...
随机推荐
- STL之queue(单向队列)
单向队列中的数据是先进先出(First In First Out,FIFO).单向队列一共6个常用函数(front().back().push().pop().empty().size()) #inc ...
- 推荐font-size的单位 % em单位
在如今这个提倡可用性设计以及用户体验设计的网络时代,CSS也是要一同参与其中的.大部分人在CSS代码编写中总是先对整体定义字体尺寸,中文情况下一般为12px,而其实这样以来在通过IE顶部菜单中的“察看 ...
- BZOJ 1617: [Usaco2008 Mar]River Crossing渡河问题
题目 1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec Memory Limit: 64 MB Description Farmer ...
- UI常用控件的一些属性
UILable 1 //设置文本信息 2 nameLable.text = @"用户名:"; 3 //对齐方式(居中 居左 局右); 4 nameLable.textAlignme ...
- ssh连接Linux自动断开后再也无法连上的问题
近期公司测试机有点抓狂,情况是这样的:用SSH登录后正常使用,但另外一部电脑也在登录,这时候会发生全部断开的情况,再也无法连接,连IP都PING不通. 今天尝试在/etc/hosts.deny 加入如 ...
- Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八
有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...
- 免费的HTML5连载来了《HTML5网页开发实例具体解释》连载(六)媒体查询
响应式设计的还有一个重要技术手段是媒体查询.假设仅仅是简单的设计一个流式布局系统,那么能够保证每一个网格按比例的放大和缩小,但有可能会使得在小屏幕下(如手机设备)网格太小而严重影响阅读,这种设计称不上 ...
- 如何用 Swift 语言构建一个自定控件
(via:破船之家,原文:How To Make a Custom Control in Swift) 用户界面控件是所有应用程序重要的组成部分之一.它们以图形组件的方式呈现给用户,用户可以通过它 ...
- setInterval定义与调用
以下是一个倒计时,可以定义定时器为全局变量(ti2),或局部变量(ti). <script type="text/javascript" src="js/jquer ...
- sed学习笔记整理
1.sed简介 sed (Stream Editor)是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处 ...