如何使用 OnNavigatedFrom 和 OnNavigatedTo 事件在页面之间传递数据
Posted
技术标签:
【中文标题】如何使用 OnNavigatedFrom 和 OnNavigatedTo 事件在页面之间传递数据【英文标题】:How to Pass Data Between Pages using OnNavigatedFrom and OnNavigatedTo Events 【发布时间】:2013-09-25 07:40:25 【问题描述】:我的应用程序中有两个页面。导航遵循 MainPage > EditPage > MainPage。 MainPage 是起始页面,编辑页面可以在单击按钮时为 NavigatedTo,并使用硬件后退按钮为 NavigatedFrom。如果 EditPage 中发生某些操作,我想在用户希望返回 MainPage 时通知 MainPage。我已经引用了http://mobile.dzone.com/articles/passing-values-between-windows,但我不确定如何相应地修复 MainPage OnNavigatedTo 事件。到目前为止,我所拥有的如下
MainPage.xaml.cs
protected override void OnNavigatedTo(NavigationEventArgs e)
//If action in EditPage occurred, determine that here
??
EditPage.xaml.cs
protected override void OnNavigatedFrom(NavigationEventArgs e)
base.OnNavigatedFrom(e);
//check to see if action occurred in EditPage, and if so, inform MainPage
if (_wasEdited == true)
MainPage mp = e.Content as MainPage;
if (mp != null)
mp.Parameter = true;
【问题讨论】:
为什么不在 EditPage 的 Base 上添加一个 prop,然后在 navigationdFrom 时,在导航前发出信号。 我不确定你的意思是什么? 您可以为所有页面创建一个基本页面。这可以帮助您解决很多问题,并且您可以重复使用页面提供的相同功能,例如 CRUD。 我还没有真正尝试过这样的事情。有没有更简单的方法?我使用了一个保存到隔离存储的自定义设置类,但是在这种方法中保存某种布尔值似乎有点过头了。 基类更合适,我认为它会帮助你越多地扩展你的应用程序(在你的情况下添加更多地图),这可以将那些重复的代码隔离在地图继承的单个类中 【参考方案1】:您的 App.xaml.cs 中可以有一个应用级别变量
public bool isThereAnyChange = false;
在您的 EditPage.xaml.cs 中,当您进行更改时,请更新“isThereAnyChange”。
private void updateChangeStatus()
(App.Current as App).isThereAnyChange = true;
然后在 MainPage.xaml.cs 中查看上述变量。
protected override void OnNavigatedTo(NavigationEventArgs e)
//If action in EditPage occurred, determine that here
if((App.Current as App).isThereAnyChange)
//The change is there do accordingly here.
【讨论】:
【参考方案2】:要在页面之间传递值,您可以使用查询字符串或应用程序状态变量,就区分导航而言,只需检查 NavigatedTo 事件参数的 e.URI 属性,就是这样
【讨论】:
我使用了查询字符串,但仅在点击事件直接导航到新页面时使用。在这种情况下,我只导航回一页,那么在这种情况下我可以使用 OnNavigated 事件使用查询字符串吗?你能举个简单的例子吗?以上是关于如何使用 OnNavigatedFrom 和 OnNavigatedTo 事件在页面之间传递数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SignalR 客户端中使用 async/await 和 hub.On
VueJs:如何使用 $emit(optionalPayload) 和 $on 将“计算函数”值从子组件传递给父组件?
如何使用 Selenium 和 Python 选择具有 unselectable="on" 属性的剑道下拉元素