Использование абсолютной навигации не сбрасывает стек и вызывает модальную навигацию - PullRequest
0 голосов
/ 05 мая 2020

У меня есть приложение с экраном входа и главной страницей

Когда я инициализирую свое приложение, я устанавливаю для навигации значение «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 Forms 4.6.0.726 Prism.Drylo c 7.2.0.1422

1 Ответ

0 голосов
/ 05 мая 2020

Кажется, это просто временное значение, которое возникает во время OnNavigatingFrom. Пока стек сбрасывается, навигация кажется модальной, но на самом деле это не так. Обнаружил это, добавив INavigationAware в мою ViewModelBase и просмотрев результат GetNavigationUriPath в методах OnNavigationTo и OnNavigatingFrom.

...