我正在尝试学习在 MAUI 应用程序和 MVVM 中导航页面的最佳方法。
我已经看到 Microsoft 的示例中,使用 PushAsync()
是默认的方式,但后来我发现也可以使用 Shell.Current.GoToAsync()
进行导航。
这两者之间有什么区别?还是它们是互补的?
我创建了一个示例来测试PushAsync()
和GoToAsync()
。
GoToAsync()
根据路由在当前页面和目标页面之间导航。因此,它不会创建多个相同页面的实例。一个页面只有一个实例。如果你使用GoToAsync()
导航,例如从Page1到Page2,你不能使用GoToAsync()
返回到Page1。你只能使用GoToAsync("..")
返回到Page1。
但是对于PushAsync()
,你可以使用PushAsync(new Page2())
来创建多个相同页面的实例。导航堆栈将是Page1 -> Page2 -> Page1 -> Page2...
因此,GoToAsync()
类似于具有单例页面的PushAsync()
。当你使用GoToAsync()
时,需要注册路由。
此外,当你使用GoToAsync()
导航时,有一些限制,例如你只能传递集合数据到下一页。但是当你使用PushAsync()
时,你可以传递几乎所有类型的数据到目标页面。
总的来说,PushAsync()
易于使用并传递数据,而GoToAsync()
具有更好的功能,但需要更多细节。
goToAsync()
时,它不会创建多个相同页面的实例。 - Liyun Zhang - MSFT我认为PushAsync()在Shell导航中已不再可用,您应该使用GotoAsync()。
但是PushAsync与将页面堆叠在其他页面上相关联,因此您稍后可以弹出并导航回该页面。 GotoAsync()使用相对路径进行导航,您可以在此处查看文档:link
PushAsync
在NavigationPage示例中使用。Shell
和NavigationPage
是两种不同的布局,每种布局都有自己的导航API。默认情况下,Maui的App.xaml.cs
会执行MainPage = new AppShell();
。因此,它使用的是AppShell,也就是Shell。 - ToolmakerSteve