Проблемы с упаковкой PrismForms NavigationService

В 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, но мы не понимаем, как это сделать правильно.

Любая помощь приветствуется!


person Norbert Wall    schedule 30.03.2017    source источник
comment
Похоже, у вас возникает исключение, когда разрешается View или ViewModel. Вы можете попробовать разрешить свои ViewModels и Page в try / catch перед переходом и зарегистрировать исключение.   -  person Dan Siegel    schedule 30.03.2017
comment
Мы попробуем это сделать и сообщим позже. Спасибо за первые идеи, Дэн.   -  person Norbert Wall    schedule 31.03.2017
comment
Это было не так. Все можно было решить хорошо.   -  person Norbert Wall    schedule 31.03.2017


Ответы (1)


Мы отредактировали несколько вещей, чтобы заставить его работать после того, как нашли интересную информацию Брайана Лагунаса в последнем посте здесь:

https://github.com/PrismLibrary/Prism/issues/591

Хотя тема была о другом, она привела к улучшениям по перезаписи службы навигации.

Помните, что в ваших viewModels служба навигации должна называться "navigationService" по соглашению. Кроме того, мы перешли от простого использования Prism Navigation Service в качестве параметра к получению от него, как предложено в приведенной выше ссылке.

    public class MyNavigationService : UnityPageNavigationService
person Norbert Wall    schedule 31.03.2017