Prism для форм Xamarin - навигация по вкладкам

xamarin.forms prism

1535 просмотра

2 ответа

365 Репутация автора

(Использование Prism 6.1.0-pre6 и XF 2.3.0.107)

Сводка : при переходе к ContentPage из TabbedPage не отображается панель инструментов / панель действий.

Я перехожу на TabbedPage (MainPage.xaml) с другой страницы. Это выглядит так:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Or.Console.Views"
             xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
             prism:ViewModelLocator.AutowireViewModel="True"
             x:Class="Or.Console.Views.MainPage">
  <local:APage/>
  <local:BPage/>
  <local:CPage/>
</TabbedPage>

А в ViewModel для APage я звоню

_navigationService.NavigateAsync("DetailsPage");

DetailsPage - это просто ContentPage, и я ожидаю, что он будет отображаться с кнопкой «Назад» и панелью действий вверху, но это не так.

Я предполагаю, что это потому, что Prism не знает о дочерних страницах вкладок, только сам TabbedPage.

Я попытался зарегистрировать дочерние страницы вкладки в Prism, но это не сработало. Также попытался обернуть каждый дочерний элемент вкладки в NavigationPage, но это вызывает странное поведение с дублирующимися панелями инструментов.

Как правильно перемещаться из вкладок?

РЕДАКТИРОВАТЬ : В ответ на ответ Брайана Лагунаса, я попытался обернуть TabbedPage в NavigationPage, поэтому, когда я перехожу к нему, я звоню

 _navigationService.NavigateAsync("DeviceNavWrapper/MainPage");

Но это дает странный результат: введите описание изображения здесь

РЕДАКТИРОВАТЬ 2 : Решение в моем случае закончилось тем, что мне нужно было вызвать NavigateAsync из APage с параметром useModalNavigation, установленным в false. Так что теперь у APage есть это:

_navigationService.NavigateAsync("DetailsPage", null, false);
Автор: erin Источник Размещён: 18.07.2016 05:17

Ответы (2)


5 плюса

5832 Репутация автора

Решение

Единственный способ получить кнопку «Назад» вверху - это разместить страницу внутри NavigationPage. Это стандартное поведение Xamarin.Forms. Итак, у вас есть несколько вариантов. Один из них - обернуть ваш APage в NavigationPage. Затем, когда вы вызываете NavigateAsync ("DetailsPage") из APageViewModel, он будет работать так, как вы хотите.

РЕДАКТИРОВАТЬ: Если вы хотите перейти на совершенно другую страницу и заменить TabbedPage, убедитесь, что TabbedPaged заключен в NavigationPage, и перейдите от TabbedPageViewModel.

Автор: Brian Lagunas Размещён: 18.07.2016 05:22

1 плюс

828 Репутация автора

Чтобы устранить дубликаты панели инструментов, я обнаружил, что урегулирование

   NavigationPage.HasNavigationBar="False"

Обертки NavigationPage проще

Автор: agentpx Размещён: 29.03.2017 12:56
Вопросы из категории :
32x32