关于mvvm模式中消息传递的疑问

软件环境:windows phone 7.1

硬件环境:lumia 800

框架:mvvmlight

问题描述: 

A页面为数据列表页面,B页面为数据detail页面,点击A页面的某一数据项跳转到B页面,同时需要将数据项的ID转递给B页面,这样B页面可以获取相应的细节数据。
这里不讨论普通的传递方式,用mvvmlight的话 操作流程如下:
在A页面的listbox里添加TapCommand

 

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Tap">
        <cmd:EventToCommand Command="{Binding TapMailCommand}" CommandParameter="{Binding SelectedItem,ElementName=lstInbox}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>

 

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

 

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

 

在A页面的code-behind里接收

protectedoverridevoid OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
Messenger.Default.Register<string>(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中的消息模式应该如何考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值