来自嵌套导航页面的 Prism gobackasync

Prism gobackasync from nested navigationpage

使用 xamarin 形成棱镜:

我的意图是让用户在尝试从 "View3" 导航回来时输入密码,并且仅当密码正确时才允许导航。

我有以下堆栈: MasterDetail/Navigation1/View1/View2/Navigation2/View3

当我尝试从 view2 导航到 navigation2 时,我使用模式导航。所以我没有 2 个导航栏..

Navigation2 有一个自定义 "exit" 按钮。按下时,我想导航回 View2,这样我的堆栈将是: MasterDetail/Navigation/View1/View2

但是当我尝试以下代码时,没有任何反应:

 _navigationService.GoBackAsync(useModalNavigation: false);
 _navigationService.GoBackAsync(useModalNavigation: true);
 _navigationService.GoBackToRootAsync();

当我使用 _navigationService.NavigateAsync("MasterDetail/Navigation/View1/View2", useModalNavigation:true); 时它可以工作,但随后它重新初始化了视图,我想避免这种情况。

这可能是什么原因造成的?难道我做错了什么? 感谢您的任何输入!

从此 PR,您现在可以在 Prism 7.1 和更早版本中使用它:

_navigationService.NavigateAsync("../../");

从导航堆栈中弹出最后 2 个页面。

另外,你不应该在同一个堆栈中有 2 个导航页面,我可能会导致你的导航出现问题,我建议你将你的 View3 变成模态页面并为 Android BackPress 添加后退验证:

protected override bool OnBackButtonPressed()
{
    if (((MyView3ViewModelPage)BindingContext).ExitCommand != null)
    {
        ((MyView3ViewModelPage)BindingContext).ExitCommand.Execute();
        return true;
    }
    return base.OnBackButtonPressed();
}

并创建您自己的后退按钮,因为它是一个表单,您不会从那里导航到其他地方,您可以完全控制如何显示该页面