Windows Phone 7 – 处理ViewModel中的OnNavigatedFrom / OnNavi
发布时间:2020-12-14 04:34:13 所属栏目:Windows 来源:网络整理
导读:我试图找出一种我的ViewModel的方法来处理从页面导航或从To导航时保存或恢复页面的状态. 我尝试的第一件事是向页面添加一个EventToCommand行为,但事件(OnNavigatedFrom和OnNavigatedTo)被声明为protected,EventToCommand不会看到要绑定的事件. 接下来我以为
我试图找出一种我的ViewModel的方法来处理从页面导航或从To导航时保存或恢复页面的状态.
我尝试的第一件事是向页面添加一个EventToCommand行为,但事件(OnNavigatedFrom和OnNavigatedTo)被声明为protected,EventToCommand不会看到要绑定的事件. 接下来我以为我会尝试使用Messenger类使用View代码中的代码将消息传递给ViewModel: protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { Messenger.Default.Send<PhoneApplicationPage>(this); base.OnNavigatedFrom(e); } protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { Messenger.Default.Send<PhoneApplicationPage>(this); base.OnNavigatedTo(e); } 但这似乎有两个问题,首先是将代码放在代码页面中.其次,ViewModel无法区分OnNavigatedFrom和OnNavigatedTo事件,而无需为PhoneApplicationPage对象创建一个包装器类(请参见下面的UPDATE). 最容易处理这些事件的MVVM-Light最方便的方式是什么? 更新: protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) { Messenger.Default.Send<PhoneApplicationPage>(this,"NavigatedFrom"); base.OnNavigatedFrom(e); } protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { Messenger.Default.Send<PhoneApplicationPage>(this,"NavigatedTo"); base.OnNavigatedTo(e); } 并注册如下: Messenger.Default.Register<PhoneApplicationPage>(this,"NavigatedFrom",false,(action) => SaveState(action)); Messenger.Default.Register<PhoneApplicationPage>(this,"NavigatedTo",(action) => RestoreState(action));
执行代码后面的命令远比整个消息传递乱七八糟.毕竟,知道它的DataContext的观点没有任何错误.
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); viewModel.NavigatedToCommand.Execute(e.Uri); } ProfileViewModel viewModel { get { return this.DataContext as ProfileViewModel; } } 更新:传递NavigationContext.QueryString可能更有用,因为它已经解析出参数和值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows – 您最喜欢的云计算提供商是什么?
- 重复Microsoft Word VBA,直到找不到搜索结果
- 如何在Windows 8 Metro应用程序中处理HTML内容
- qt4 – Qt – Windows 7基本主题下禁用的QPushButton的样式
- windows-server-2008 – 如何在Windows Server 2008上将流量
- 在Windows下调试Android NDK
- windows – Postgres持续30%的CPU使用率
- Windows – 通过PowerShell运行.cmd文件
- Windows – 如何使用DoEvents()而不是“邪恶”?
- Windows 环境下如何安装 OpenSSL证书
推荐文章
站长推荐
热点阅读