2016-12-18 9 views
0

Я хочу подтвердить, правильно ли я использую навигационную службу призмы с формами xamarin. У меня есть страница с подробными сведениями, стилизованная страница навигации и множество страниц контента.Правильное использование навигационной службы Prism в формах xamarin

прямо сейчас я использую услугу следующим образом:

  var prj = await dataService.GetLwdProject(appState.SelectedProjectId); 
      var nparam = new NavigationParameters(); 
      nparam.Add("Project", prj); 
      await NavigateTo("RootPage/StyledNavigationPage/SessionsListPage", nparam); 

Если страница Master детали является объектом корневой страницы. Поэтому ожидать, что, когда пользователь выбирает элемент из этого списка страницы правильный путь к службе должен быть:

   var nparma = new NavigationParameters(); 
       nparma.Add("Session", option); 
       await App.NavigateTo("RootPage/StyledNavigationPage/SessionsListPage?ProjectId=" + option.ProjectId + "/LocationListPage", nparma); 

Что я ожидаю, что только LocationListPage будут добавлены к навигации стеке, но когда я использую аппаратная кнопка назад на андроиде, похоже, что добавлена ​​не только последняя страница, но и весь путь (все страницы). Так это правильный способ авто построить желаемый путь?

ответ

0

Нет. Навигация всегда относительно того, где вы его вызываете. Теперь у вас будет переход на всю глубинную ссылку, которую вы создали каждый раз. Просто перейдите к целевой странице NavigationPage/SessionListPage и передайте свой параметр. Тем не менее, вы не будете получать новую страницу каждый раз в этом случае, поскольку вы переходите к одному и тому же представлению, но просто передаете другое состояние.

+0

Причина, по которой я строю весь патч, - это единственный способ, которым я нашел, чтобы создать страницу ожидаемым образом. на пути: RootPage/StyledNavigationPage/SessionsListPage - это, по сути, страница основных деталей с навигационной страницей, указывающей на SessionListPage. Если я просто напишу, перейдите к LocationListPage, показывается только простая страница содержимого, поэтому ни одна навигационная панель или доступ к основной детали стр. Единственный путь назад - использование кнопки возврата оборудования. Если я выразим это так: StyledNavigationPage/LocationListPage, я верну навигацию, но не обратно. – Snowppy

+0

Вы не делаете это правильно. Чтобы достичь желаемого поведения, ваша NavigationPage должна внедрить INavigationPageOptions и установить для свойства ClearNavigationStackOnNavigation значение false. Теперь, когда вы переходите из своего MasterDetail, до тех пор, пока вы префикс Detial с помощью navigationPage, он не сбросит стек, а скорее переместит каждую страницу в стек. –