在ViewModel中使用NavigationService在ViewModel中使用NavigationService
来源:互联网 发布:小号软件哪个更好 编辑:程序博客网 时间:2024/05/29 07:40
在WP7 APP的开发中,页面之间的跳转是一个再常见不过的操作啦,在Xaml中能实现,在Xaml背后的cs文件中用NavigationService能实现,但是在使用MVVM开发模型之后,在ViewModel中就不如前面的实现起来直观了。 其实在ViewModel中实现页面的跳转也很简单,下面的代码: using Microsoft.Phone.Controls; varroot=App.Current.R
在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));
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
{
//显示出错信息。
}
{
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
{
//显示出错信息
}
{
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/archive/2011/12/30/Windows_Phone_WP7_Develop_MVVM_ViewM
- 在ViewModel中使用NavigationService在ViewModel中使用NavigationService
- Windows Phone 7(WP7)开发 在ViewModel中使用NavigationService
- Windows Phone 7(WP7)开发 在ViewModel中使用NavigationService
- 使用dynamic在ASP.NET MVC中应用匿名ViewModel
- 初学ICommand接口,UI响应在viewmodel中实现
- 在MvvmLight中View和ViewModel的绑定
- 使用ViewModel 模式
- NavigationService.Navigate卡在页面,不转向下个页面?
- ViewModel
- ViewModel
- 在Xamarin开发,使用MessageCenter在ViewModel和View之间传递值
- NavigationService简介
- kockout.js的viewmodel对象的属性,在javascript中调用的两种写法
- Prism 框架中使用IEventAggregator事件聚合器简单实现ViewModel之间的通讯
- 如何在Viewmodel里面定义控件属性
- dorado5中viewModel的几种状态
- dorado5中viewModel的几种状态
- 使用Expression Blend处理ViewModel绑定
- oracle存储过程循环插入10000条数据
- SurfaceFlinger启动过程分析(四)
- poj1054
- 引入内核模式安全字符串函数
- Android中选项卡功能的实现
- 在ViewModel中使用NavigationService在ViewModel中使用NavigationService
- sys下面的文件
- 关于 int main(int argc,char* argv[]) 的
- Android中TASK和PROCESS的区别,获取最近运行的程序和正在运行的进程
- emlog将博客正文设置为文章页的description描述
- ActiveX控件的使用方法
- Arguments.length
- 美国学生毕业前必做的20件事
- DIV+CSS简单丑陋的二级菜单