GoBackToRootAsync с модальной навигацией в Prism - PullRequest
0 голосов
/ 25 октября 2019

Таким образом, приложение использует модальный стек вместо стека навигации, вот пример класса приложения:

protected override async void OnInitialized()
{
    InitializeComponent();
    await NavigationService.NavigateAsync("MainPage");
}

protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterForNavigation<NavigationPage>();
    containerRegistry.RegisterForNavigation<MainPage, MainPageViewModel>();
    containerRegistry.RegisterForNavigation<Page1>();
    containerRegistry.RegisterForNavigation<Page2>();
    containerRegistry.RegisterForNavigation<Page3>();
}

Я перемещаюсь от MainPage до Page1 до Page2 до Page3Например, в Page2ViewModel:

public DelegateCommand ToPage3Command => new DelegateCommand(() => 
NavigationService.NavigateAsync("Page3", useModalNavigation: true));

в Page3 Я хочу вернуться к корню (MainPage), поэтому я делаю это:

 public DelegateCommand ToMainPageCommand => new DelegateCommand(async () =>
 {
     var navResult = await NavigationService.GoBackToRootAsync(new NavigationParameters
     { { KnownNavigationParameters.UseModalNavigation, true } });
 });

но navResult.Exception получает System.InvalidOperationException исключение:

Последовательность не содержит элементов

Я пытаюсь сделать это на основе комментария Брайана здесь . но выброшенное исключение указывает, что GoBackToRootAsync возможно только со стеком навигации: https://github.com/PrismLibrary/Prism/blob/a4c131ab271fcab26c3ed9c5e3eb3316ec02a4ce/Source/Xamarin/Prism.Forms/Navigation/PageNavigationService.cs#L198

Если это невозможно с модальным стеком, есть ли обходной путь без переключения на использование стека навигации?

Основная причина, по которой я хочу это сделать, заключается в том, что я хочу перейти к MainPage без его повторной инициализации и очистить модальный стек, поэтому любое решение, которое достигает этого, приветствуется.

...