如何使用 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 将“计算函数”值从子组件传递给父组件?

如何将文本“ON”和“OFF”添加到切换按钮

如何使用 Selenium 和 Python 选择具有 unselectable="on" 属性的剑道下拉元素

如何在 PostgreSQL 中使用 RETURNING 和 ON CONFLICT?

如何解决“termsOfUse 必须是布尔类型,但最终值为:“on”。使用 Ionic、React、Yup 和解析器