欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

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

发布时间:2025/5/22 asp.net 55 豆豆
生活随笔 收集整理的这篇文章主要介绍了 WPF新手实践7:MVVM Light Toolkit(七、Messenger) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

关键字: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()方法作为具体实现。

编译通过。

转载于:https://www.cnblogs.com/phoenixtrees/archive/2011/05/10/2041921.html

总结

以上是生活随笔为你收集整理的WPF新手实践7:MVVM Light Toolkit(七、Messenger)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。