zoukankan      html  css  js  c++  java
  • 关于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中的消息模式应该如何考虑。

  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/icuit/p/2495396.html
Copyright © 2011-2022 走看看