Таким образом, приложение использует модальный стек вместо стека навигации, вот пример класса приложения:
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
без его повторной инициализации и очистить модальный стек, поэтому любое решение, которое достигает этого, приветствуется.