从导航堆栈中删除页面 - xamarin.forms

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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 @Hetal Credits 应该是这个。 forums.xamarin.com/discussion/57130/remove-page-from-navigation @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 的顶部放置一个条件即可不加载页面。

【讨论】:

以上是关于从导航堆栈中删除页面 - xamarin.forms的主要内容,如果未能解决你的问题,请参考以下文章

如何从导航堆栈中删除页面 - c# windows 8

从导航堆栈中删除页面 - xamarin.forms

在 Xamarin.Forms 中使用 MVVM 进行页面导航

React Native:从导航堆栈中删除后退按钮?

如何从模态堆栈优化方式(特定)中删除页面?

如何从导航堆栈中删除 ViewController 并且没有返回到它的选项-Swift