WPF新手实践7:MVVM Light Toolkit(七、Messenger)

本文介绍如何使用MVVM Light Toolkit框架中的Messenger特性优化WPF应用程序的登录界面体验,包括自动填充上次登录的用户名及调整输入焦点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字:WPF .Net C# MVVM Light Toolkit 框架 Visual Studio 2010 VS2010 Expression Blend 4 入门 教程 新手 实践

七、Messenger

一个用户体验良好的登录界面应该能够记录最后一次登录的用户ID以避免无意义的重复输入。为了实现这个功能,我将继续对上一篇的登录页面进行加工。

1、在LoginViewModel.cs中,再添加一个RelayCommand类型的属性LoadedCommand作为响应View层页面载入完成事件的Command对象,并在构造函数中对其进行初始化(PageLoaded()方法里涉及的两个MoveInputFocusTo方法的具体实现稍后详述)。

2、在Blend 4中,从“资产”页签的列表中选择“行为”,将“EventToCommand”拖拽到[Page]上,把默认名称改为PageLoaded。

3、将PageLoaded的Command属性绑定到LoadedCommand(注意“属性”页签中“触发器”一栏的EventName要选择Loaded),如下两图所示。

4、假设作为Model的User类中有一个LoadLastLoginInfo()方法会在每次构造新的User对象时从配置文件中读取上一次成功登录的用户ID,那么作为View层的LoginPage就需要根据用户ID的输入框是否有值来决定输入焦点究竟是应该落在用户ID输入框还是密码输入框。可是不论哪种输入框,都没有一个可以用来绑定到ViewModel层的属性来标识该元素应当获得输入焦点。如果想这么做,必须要调用该元素的Focus()方法。问题出现了:我不想让ViewModel层知道是哪种界面元素需要获得输入焦点。为了避免View层和ViewModel层的耦合太紧,我需要用MVVM Light Toolkit的Messenger来解除它们之间的强引用。首先,创建一个新的类MoveLoginInputFocusMessage,其中包含一个string类型的属性InputFieldName。

5、在LoginViewModel.cs中,实现PageLoaded()方法里涉及的两个MoveInputFocusTo方法(消息发送者)。

6、在LoginPage.xaml.cs中,修改LoginPage的构造函数,注册消息接收者并提供MoveLoginInputFocus()方法作为具体实现。

编译通过。

作者:李凤桐;出处:http://www.cnblogs.com/phoenixtrees。
MVVM Light Toolkit是Silverlight开发中用到的最多的MVVM框架。 GalaSoft.MvvmLight 类库 ViewModelBase 类是ViewModels的基础类,在开发中ViewModls类都要继承自它。 Messenger类 用于应用程序的通信。接收者仅接受注册过的消息类型。 此外,目标类型可以被指定,用Send<TMessgae,TTarget>(TMessage message)实现,在这种情况下如果接收者类型和目标参数类型匹配信息被传递,message可以是任何对象,可以用特定的消息类型或者创建自己的类型继承自它们。 MessageBase:消息基类,是消息发布者的任何信息。 GenericMessage<T>:一个简单的泛型消息。 NotificationMessage: 用于发送一个string类型通知给接受者。 NotificationMessage<T>:NotificationMessage泛型方工。 NotificationMessage:向接受者发送一个通知,允许接受者向发送者回传消息。 NotificationMessageAction<T>:NotificationMessage的泛型方式。 DialogMessage:发送者(通常是View)显示对话,并且传递调用者得回传结果(用于回调),接受者可以选择怎样显示对话框,可以使是标准的MessageBox也可也是自定义弹出窗口。 PropertyChangedMessage<T>:用于广播一个属性的改变在发送者里,和PropertyChanged事件有完全箱体内各的目的,但是是一种弱联系方式。 Command 类在你的应用程序中是最佳的使用方式,可以使用RelayCommand<T>和RelayCommand,很方便的绑定一个执行命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值