使用绝对导航不会重置堆栈,而是强制进行模态导航

问题描述 投票:0回答:1

我有一个带有登录屏幕和主页的应用程序

[初始化应用程序时,我将导航设置为“ NavigationPage / LoginPage”。当我登录到应用程序时,我使用“ / NavigationPage / MainPage”路由通过绝对导航重置了堆栈。我所有的页面都有一个绑定到当前导航Uri的标签,当我登录并导航到主页后重置堆栈时,我的Uri看起来像这样

/NavigationPage/LoginPage/MainPage?useModalNavigation=true

我已经阅读过,如果您在彼此的顶部上有重复的页面,这可能会导致默认情况下导航变为模式的。但是我要重置堆栈,甚至要重置NavigationPage。这不会立即引起任何问题,但是我发现在应用程序导航堆栈的更深部分中,某些导航无法正常工作,这似乎是原因所在

有人知道为什么会这样吗?

我的代码

App.xaml.cs

protected override async void OnInitialized()
{
     InitializeComponent();

     await NavigationService.NavigateAsync("NavigationPage/LoginPage");
}

LoginPageViewModel.cs

public ICommand LoginCommand { get; }
public LoginPageViewModel(INavigationService navigationService) : base(navigationService)
{
     LoginCommand = new Command(Login);
     NavUri = NavigationService.GetNavigationUriPath();
}

private async void Login()
{
     await NavigationService.NavigateAsync("/NavigationPage/MainPage");
}

MainPageViewModel.cs

public MainPageViewModel(INavigationService navigationService) : base(navigationService)
{
     Title = "Main Page";
     NavUri = NavigationService.GetNavigationUriPath(); // current URI on the mainpage is /NavigationPage/LoginPage/MainPage?useModalNavigation=true

     NavigateToPageACommand = new Command(NavigateToPageA);
}

我正在使用;Xamarin表格4.6.0.726Prism.Dryloc 7.2.0.1422

xamarin.forms prism
1个回答
0
投票

似乎只是OnNavigatingFrom期间发生的一个临时值。重置堆栈时,导航似乎是模式的,但实际上不是。通过向我的ViewModelBase添加INavigationAware并在OnNavigatedTo和OnNavigatingFrom方法中查看GetNavigationUriPath的结果发现了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.