zoukankan      html  css  js  c++  java
  • Windows Phone 7(WP7)开发 在ViewModel中使用NavigationService

      在WP7 APP的开发中,页面之间的跳转是一个再常见不过的操作啦,在Xaml中能实现,在Xaml背后的cs文件中用NavigationService能实现,但是在使用MVVM开发模型之后,在ViewModel中就不如前面的实现起来直观了。

      其实在ViewModel中实现页面的跳转也很简单,下面的代码:

    using Microsoft.Phone.Controls;
    
    
    
    var root = App.Current.RootVisual as PhoneApplicationFrame;
    root.Navigate(new Uri("/NextPage.xaml", UriKind.Relative));
    

      一般的任务情况下,这几行代码已经能够完成啦,但是有一个问题,让我们再细致探讨一下:做一个用户登录的功能,按照正常的业务流程,用户在某页面输入完用户名和密码之后,程序连接服务器端验证用户的合法性(此过程需要网络连接,过程可能需要耗费时间较长,并且是异步操作),当服务器返回数据之后,程序判断如果是合法用户则跳转到用户个人信息界面,否则给出错误提示。

      在VIEWMODEL处理服务器返回数据之后选择行为的代码应该是这样的:

    if (result.IsSuccess == true)
                {
                    var root = App.Current.RootVisual as PhoneApplicationFrame;
                    root.Navigate(new Uri("/UserInfo.xaml", UriKind.Relative));
                }
                else
                {
                   //显示出错信息。
                }
    

      但正如刚才所说的,由于要连接服务器,此过程需要网络连接,如果遇到网络信号不好,可能用户在点击“登录”按钮之后,等了10秒都没有得到任何成功或者失败的提示(用户体验好一点的可能会显示一个“登录中”),用户等的不耐烦了按了后退键或者其他操作,进入了别的页面,突然,服务器的反馈数据回来之后,上面的ViewModel代码将用户强行带入了个人信息页面,So,用户很生气,后果很严重。

    加一个判断就好了:

    if (result.IsSuccess == true)
                {
                    var root = App.Current.RootVisual as PhoneApplicationFrame;
                    if (root.CurrentSource == new Uri("Login.xaml", UriKind.Relative))
                        root.Navigate(new Uri("UserInfo.xaml", UriKind.Relative));
                }
                else
                {
                    //显示出错信息
                }
    

    (另外发现博客园的文字被其他站点采集严重,而且好多站点连个出处都不写,转载请注明出处~  http://www.cnblogs.com/vistach)

  • 相关阅读:
    5773. 【NOIP2008模拟】简单数学题
    jzoj_5455. 【NOIP2017提高A组冲刺11.6】拆网线
    5461. 【NOIP2017提高A组冲刺11.8】购物
    博客第三天
    博客第二天
    博客的第一天。
    微服务架构下的session一致性
    分布式数据库数据一致性的原理、与技术实现方案
    epoll的本质
    DNS域名解析过程
  • 原文地址:https://www.cnblogs.com/vistach/p/Windows_Phone_WP7_Develop_MVVM_ViewModel_NavigationService.html
Copyright © 2011-2022 走看看