我想从代码隐藏中导航 FlyoutItems。通常的方法Shell.Current.GoToAsync(nameof(PageTwo));
不一样。
演示:我在 Visual Studio 2022 中创建了一个默认的 MAUI 应用。我安装了 nuget CommunityToolkit.MVVM.Input。我添加了 3 个 XAML Contentpages。
在 App.Shell.xaml 中,我添加了 3 个弹出项目。当我运行应用程序时,它们会完美显示和运行。请注意,菜单的“selectedItem”可轻松同步。这是我想要从代码隐藏/视图模型中使用的行为。
Shell.FlyoutBehavior="Flyout"
Title="DeleteMe2">
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent
Title="Page One"
Icon="one_icon.png"
ContentTemplate="{DataTemplate local:PageOne}"
Route="PageOne" />
<ShellContent
Title="Page Two"
Icon="two_icon.png"
ContentTemplate="{DataTemplate local:PageTwo}"
Route="PageTwo" />
<ShellContent
Title="Page Three"
Icon="three_icon.png"
ContentTemplate="{DataTemplate local:PageThree}"
IsVisible="true"
Route="PageThree" />
</FlyoutItem>
在页面上有一些按钮可以“执行某些操作”,然后导航到其他页面。在 ViewModel 中。这似乎会创建其他页面的新实例,并且导航属性会丢失。
[RelayCommand]
public void GoToPageTwo()
{
//this opens a new instance of PageTwo
//and has a "Back" arrow on the top left
Shell.Current.GoToAsync(nameof(PageTwo));
}
[RelayCommand]
public void GoToPageThree()
{
Shell.Current.GoToAsync(nameof(PageThree));
}
因此,在我的后台代码中,我想模仿点击弹出菜单项或页面底部按钮的行为
在您的例子中,所有三个页面都是根页面。因此,您可以调用以下代码来更改导航堆栈的根页面。
此外,
Shell.Current.GoToAsync("///PageThree");
也是可以的。有关更多信息,你可以查看官方文档关于相对路由。