我正在尝试学习如何在MAUI应用程序和MVVM中在页面之间导航的最佳方法。
我在微软的示例中看到,默认的方式是使用PushAsync()
,但后来我看到可以使用Shell.Current.GoToAsync()
导航。
两者的区别是什么?或者它们是互补的?
我创建了一个样本来测试PushAsync()
和GoToAsync()
。
GoToAsync()
根据路由在当前页面和目标页面之间进行导航。因此,它不会创建同一页面的多个实例。一个页面只有一个实例。如果你选择Page1 ->Page2与GoToAsync()
,你不能使用GoToAsync()
去Page1。你只能使用GoToAsync("..")
去Page1
但是对于PushAsync()
,您可以使用PushAsync(new Page2())
来创建同一页面的多个实例。导航堆栈会是Page1 ->所以Page2→所述→所以Page2…
所以GoToAsync()
就像带有单例页面的PushAsync()
。当您使用GoToAsync()
时,需要注册路由。
此外,当您使用GoToAsync()
进行导航时,有一些限制,例如您可以将集合数据传递到下一页。但是当您使用PushAsync()
时,您可以将几乎所有类型的数据传递给目标页面。
总的来说,PushAsync()
易于使用和传递数据,GoToAsync()
的功能更好,但需要更多的细节。
我认为PushAsync()不再可用来导航与Shell,你应该使用GotoAsync()。
但是PushAsync与将页面堆叠在其他页面上有关,因此您可以稍后弹出并导航回该页面。GotoAsync()使用亲属导航,你可以在这里查看文档:link