Как прописать маршрут навигации, не видимый в оболочке, в 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 //
очищает стек навигации, пытается отправить указанную страницу.
Работает, когда является частью иерархии оболочки, а не независимой страницей.