【问题标题】:Remove page from Navigation stack - xamarin.forms从导航堆栈中删除页面 - xamarin.forms
【发布时间】:2016-03-09 04:05:37
【问题描述】:

在我的应用结构中,如下所示, 列表页 -> 详情页 -> 编辑页

在编辑页面中有一个“删除”按钮,用于从数据库中删除数据。

现在我的问题是将用户从编辑页面导航到列表页面,

我为此使用 Navigation.popasync 2 次,但在详细信息页面上,我从服务中收到错误,表明不存在此类记录。

如何正确地将用户从编辑页面导航到列表页面?

【问题讨论】:

    标签: navigation xamarin.forms


    【解决方案1】:
    // Remove page before Edit Page
    this.Navigation.RemovePage (this.Navigation.NavigationStack [this.Navigation.NavigationStack.Count - 2]);
    // This PopAsync will now go to List Page
    this.Navigation.PopAsync ();
    

    【讨论】:

    • 因为它可能有助于解释发生了什么?你知道,和我们通常写 cmets 的原因一样!
    • 这是一个非常糟糕的建议。例如,在 uwp 上,您会收到一条错误消息,告诉您“您无法删除页面,您正在使用”,它也会在 android 上发生,但并非总是如此。如果您正在推送异步并且推送事件比 popevent 慢,则会发生。在IOS上我不确定。
    • 我已经在 android/iOS 上实现了这个,而且效果很好。我没有签入 UWP
    • @NickKovalsky 页面是否以模态方式推送?
    【解决方案2】:
    Navigation.PopToRootAsync ();   
    

    将您送回您的主页..

    【讨论】:

    • 这可能不一定会从堆栈中删除详细信息页面。如果您检查 navigationstack 中的页面,您可能会看到 detailpage 仍在内存中。
    【解决方案3】:

    你可以这样做:

    var _navigation = Application.Current.MainPage.Navigation; 
    var _lastPage = _navigation.NavigationStack.LastOrDefault(); 
    //Remove last page
    _navigation.RemovePage(_lastPage);
    //Go back 
    _navigation.PopAsync();
    

    但是如果你需要导航到根页面,你可以使用这个:

    var _navigation = Application.Current.MainPage.Navigation;
    _navigation.PopToRootAsync ();  
    

    【讨论】:

      【解决方案4】:

      那将是因为您的详细信息页面正在尝试加载 OnAppearing 或其他事件中不再存在的记录。因此,只需在记录是否为 null 的顶部放置一个条件即可不加载页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-21
        • 2017-01-16
        • 2021-04-24
        • 2020-12-07
        • 1970-01-01
        • 2018-06-09
        相关资源
        最近更新 更多