博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于mvvm模式中消息传递的疑问
阅读量:2505 次
发布时间:2019-05-11

本文共 1353 字,大约阅读时间需要 4 分钟。

软件环境:windows phone 7.1

硬件环境:lumia 800

框架:mvvmlight

问题描述: 

A页面为数据列表页面,B页面为数据detail页面,点击A页面的某一数据项跳转到B页面,同时需要将数据项的ID转递给B页面,这样B页面可以获取相应的细节数据。

这里不讨论普通的传递方式,用mvvmlight的话 操作流程如下:
在A页面的listbox里添加TapCommand

 

 

这样在A页面的viewModel里注册此TapCommand事件到方法中,因为viewModel看不到view,所以需要发送一个uri消息并将点击到的id信息随同uri一起通过Messenger发送给A页面的code-behind页面。

 

privatevoid NavigatedToReadMail(string sMailId) { Messenger.Default.Send
(@"/Ui/ReadDoumail.xaml?MailId="+ sMailId, "Navigate"); }

 

在A页面的code-behind里接收

protectedoverridevoid OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { Messenger.Default.Register
(this, "Navigate", uri => { if (uri !=null) { NavigationService.Navigate(new Uri(uri, UriKind.Relative)); } } ); base.OnNavigatedTo(e); }

 

这样即实现了跳转到B页面,同时,在B页面中接收uri及随同的id消息

protectedoverridevoid OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { string sMailId =string.Empty; NavigationContext.QueryString.TryGetValue("MailId",out sMailId); ViewModelLocator.DoumailStatic.GetMail(sMailId);  base.OnNavigatedTo(e); }

 

我的疑问在此,原来的思路是将NavigationContext获取到的信息绑定到B页面的某个控件中,并通过B页面的某个带参数的command事件将获取到的信息传递给到B页面的viewModel中并绑定B页面的某个方法中更新B页面的UI。 后来朋友告诉我直接用红色的语句实现,我总觉得这样看起来有点怪怪的,这样有破坏mvvm的原则么? 忘了在哪里看过有文章说尽量不在code-behind中写逻辑?可我觉得有时候不用code-behind会太憋屈。 请大家一起讨论一下关于mvvm中的消息模式应该如何考虑。

转载地址:http://dolgb.baihongyu.com/

你可能感兴趣的文章
笔记:Hadoop权威指南 第8章 MapReduce 的特性
查看>>
JMeter响应数据出现乱码的处理-三种解决方式
查看>>
获取设备实际宽度
查看>>
图的算法专题——最短路径
查看>>
vue cli的安装与使用
查看>>
SQL批量删除与批量插入
查看>>
Notes on <High Performance MySQL> -- Ch3: Schema Optimization and Indexing
查看>>
C语言之一般树
查看>>
懂了很多大道理,却依旧过不好一生
查看>>
手工数据结构系列-C语言模拟队列 hdu1276
查看>>
【PyQt5 学习记录】008:改变窗口样式之二
查看>>
android EditText长按屏蔽ActionMode context菜单但保留选择工具功能
查看>>
BUAA 111 圆有点挤
查看>>
c++ 继承产生的名字冲突问题 (1)
查看>>
SQL中on条件与where条件的区别
查看>>
Ubuntu下查看软件版本及安装位置
查看>>
安装IIS
查看>>
动态加载JS(转)
查看>>
Thrift 教程 开发 笔记 原理 资料 使用 范例 示例 应用
查看>>
一个MySQL-JDBC驱动bug引起的血案……
查看>>