В PrismForms у нас возникла проблема, заключающаяся в том, что NavigationStack пуст после перехода на новую страницу. Это означает, что после использования аппаратной кнопки возврата на SecondPage приложение закрывается. Хотя обратная стрелка в заголовке на Android не отображается. Если присмотреться, вы можете увидеть стрелку назад на короткое время после переключения страницы. Я предполагаю, что это до того, как NavigationStack будет очищен.
На первую страницу мы переходим с помощью следующей команды в OnInitialized () в нашем App.xaml.cs, который является производным от PrismApplication.
NavigationService.NavigateAsync("NavigationPage/StartPage");
(Если здесь выполняется переход только на «StartPage», стек не очищается.)
Это связано с вызовом PageNavigationService.ProcessNavigationForNavigationPage (...) bool clearNavStack = GetClearNavigationPageNavigationStack (currentPage); и PageNavigationService.ProcessNavigationForContentPage (...) нет.
От начальной страницы к следующей мы перемещаемся с помощью NavigateAsync ("SecondPage") «. Здесь проявляется описанное поведение.
Для навигации мы используем класс, который является оболочкой для Prism NavigationService. Мы храним его как свойство и получаем его через Unity в нашем конструкторе:
this.PrismNavigation = prismNavigation ?? throw new ArgumentNullException(nameof(prismNavigation));
Методы NavigateAsync и GoBackAsync и т. Д. Мы просто пропускаем.
Таким образом, мы хотим отделить наш ViewModel-Project от ссылок на XamarinForms, чтобы позже иметь возможность использовать те же ViewModel, например, WPF-GUI.
Почему стек очищается нашей собственной службой NavigationService? Если вместо этого мы зарегистрируем исходный Prism NavigationService в App.xaml.cs, обратный переход снова будет работать должным образом. Мы нашли точку во фреймворке и могли избежать очистки с помощью взлома drity, но это противоречит логике навигации, реализованной в PrismForms, но мы не понимаем, как это сделать правильно.
Любая помощь приветствуется!