Как прописать маршрут навигации, не видимый в оболочке, в Maui Shell?

У меня есть приложение Maui со страницей, которая не должна отображаться в элементах Shell.

Пробую зарегистрировать, судя по документации и нескольким статьям вроде этой:

      public partial class AppShell : Shell
{
    public AppShell()
    {
        InitializeComponent();
        Routing.RegisterRoute(nameof(ItemPage), typeof(ItemPage));
    }
}

В моем обработчике событий в ViewModel, который реализует команду под названием:

              async void OnItemTapped(ItemViewModel itemVM)
        {
            string route =
                $"//{nameof(ItemPage)}?{nameof(ItemPage.Id)}={itemVM.Id}";
            await Shell.Current.GoToAsync(route);
        }

При отладке я могу убедиться, что содержимое переменной route соответствует ожиданиям. При выполнении GotoAsync() я получаю исключение: «System.ArgumentException: 'невозможно определить маршрут для: //ItemPage?Id=1-0 (параметр 'uri')'».

Если я зарегистрирую тот же маршрут из xaml, разрешение маршрута в GotoAsync будет работать:

      <?xml version="1.0" encoding="UTF-8" ?>
<Shell
    ...
    <TabBar>
        <ShellContent
            Title="ItemPage"
            ContentTemplate="{DataTemplate local:ItemPage}"
            Route="ItemPage" />
    </TabBar>
</Shell>

Я пытался

  • преобразование всего текста в нижний регистр при регистрации и навигации
  • префикс маршрута с "//" при регистрации

Вопросы:1.) Я что-то не так делаю, когда пытаюсь программно прописать маршрут? Routing.RegisterRoute(имя(ItemPage), тип(ItemPage));

2.) Если это глючит на Мауи, каков альтернативный способ регистрации маршрута страницы без отображения его в меню оболочки?

Окружающая среда:

  • Visual Studio 2022, версия 17.4.3
  • Мауи v7

2 ответа

  • Удалить из началаstring route = $"//...

Я думаю, что программный, поскольку он не является частью иерархии Shell, нарушает Invalid Routes:

«Глобальные маршруты в настоящее время не могут быть единственной страницей в стеке навигации».

The //очищает стек навигации, пытается отправить указанную страницу.
Работает, когда является частью иерархии оболочки, а не независимой страницей.

Комментарий ToolMakerSteve выше является принятым ответом.

Другие вопросы по тегам