Оболочка xamarin forms не переходит во вложенное представление - PullRequest
0 голосов
/ 09 июля 2019

У меня есть проект форм xamarin, в котором используется новый AppShell.У меня есть всплывающее меню с некоторыми пунктами меню.Один из пунктов меню называется например MyComputer.Откройте его, он показывает список папок.Когда я нажимаю на одну папку, открывается новая страница и снова отображается список папок - и так далее - как вложенные папки.К сожалению, при использовании новой await Shell.Current.GoToAsync("folder"); для открытия папки на странице папки ничего не происходит.Навигация не выполняется.Кажется, что не разрешается помещать одну и ту же страницу в стек навигации.Однако это работало со «старой» навигацией myPage.Navigation.PushAsync(folderPage);.Поскольку исходная документация для AppShell не содержит ограничений для вложенных представлений, я думаю, что я что-то упустил.

Мой AppShell.xaml

<FlyoutItem FlyoutDisplayOptions="AsMultipleItems" Route="app">
  <ShellContent Title="MyComputer" Route="myComputer" ContentTemplate="{DataTemplate views:MyComputerPage}"/>
</FlyoutItem>

Зарегистрировать страницу моей папки:

Routing.RegisterRoute("folder", typeof(FolderPage));

Вызов страницы папки из MyComputerPage (это работает):

await Shell.Current.GoToAsync("folder?name=myFolder1");

Вызов страницы папки из FolderPage (это не работает, ничего не происходит, навигация не выполняется):

await Shell.Current.GoToAsync("folder?name=myFolder1b");

Я хочу перемещаться так:

MyComputerPage -> FolderPage -> FolderPage -> FolderPage -> ...

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

  • myFolder1
    • myFolder1a
      • myFolder1aX
      • myFolder1aY
      • myFolder1aZ
    • myFolder1b
    • myFolder1c
  • myFolder2
  • myFolder3

РЕДАКТИРОВАТЬ:

@ Младший Цзян - MSFT здесь вы идете:

enter image description here

1 Ответ

1 голос
/ 17 июля 2019

О Относительный маршрут и Передача данных из общего GIF и кода, возможно, вы что-то ошиблись при их использовании.

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

await Shell.Current.GoToAsync("TargetPageName");
//such as await Shell.Current.GoToAsync("myFolder1Page"); 

Данные могут передаваться в качестве параметров запроса при выполнении программной навигации.

await Shell.Current.GoToAsync($"TargetPageName?DefinedKeyName={BePassedValue}");
//such as Shell.Current.GoToAsync($"myFolder1Page?name={ValueOfmyFolder1Page}");

Для получения данных класс, представляющий страницу, к которой осуществляется переход, или класс для BindingContext страницы, должен быть украшен QueryPropertyAttribute для каждого параметра запроса:

[QueryProperty("Name", "name")]
public partial class myFolder1Page: ContentPage
{
    public string Name
    {
        set
        {
            BindingContext = FolderData.FoldePages.FirstOrDefault(m => m.Name == Uri.UnescapeDataString(value));
        }
    }
    ...
}

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

например

В MyComputerPage , когда вы переходите на страницу myFolder1 , вы можете зарегистрировать ключ страницы myFolder1 как myFolder1 page.

Тогда, если нет данных:

await Shell.Current.GoToAsync("myFolder1");

Пропускные данные:

await Shell.Current.GoToAsync($"myFolder1?name={ValueOfmyFolder1}");

Когда эта рабочая и следующая страница регистрируются как одна и та же, то заходите на myFolder1 страницу , затем хотите перейти на страницу myFolder1a , следует написать следующее:

await Shell.Current.GoToAsync("myFolder1a");//no data
await Shell.Current.GoToAsync($"myFolder1a?name={ValueOfmyFolder1a}");// pass data

Далее, хотите перейти на страницу myFolder1aX , следует написать следующее:

await Shell.Current.GoToAsync("myFolder1aX");//no data
await Shell.Current.GoToAsync($"myFolder1aX?name={ValueOfmyFolder1aX}");//pass data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...