我正在努力了解PRISM INavigationService
如何映射到Xamarin Forms提供的标准Navigation.PushAsync
。
我有一个应用程序,我已经开始使用XF。它由一个MasterDetailPage
组成,它是主页,“详细信息”ContentPage
包含许多按钮,用于导航到其他功能。在App.xaml.cs中,我将Application.MainPage设置为包含在NavigationPage“MainPage = new NavigationPage(new HomePage())
”中的主页实例。当我想要显示功能页面时,我调用“Navigation.PushAsync(new NewPage())
”,这会显示新页面以及包含后退按钮的工具栏;然后,我可以使用设备上的后退按钮或使用工具栏中的后退按钮导航回我的主页。请注意,该应用程序正在Android上运行。
然后我看了整合PRISM.Forms;我想使用它,因为我已经使用PRISM for WPF多年,并认为它应该证明是有益的。我使用的是最新版本(6.3)。
我创建了一个基于“PRISM模板”的新应用程序,然后将差异复制到我现有的项目中......
到目前为止,这么好。我按预期看到了我的主页。然而,当我导航到“NewPage”时,工具栏中没有后退按钮(虽然我仍然有来自MasterDetailPage
的“汉堡包”菜单)如果我使用设备上的后退按钮它会返回给我操作系统。似乎该页面已作为MasterDetailPage的“Content”部分插入,而不是作为新的子页面导航到该页面。
我确信这不是设计因素,因此我误解了一些事情,但有人可能会指出我正确的方向,否则我觉得我将不得不放弃PRISM并寻找替代方案。
在尝试将登录屏幕引入混音时,我也遇到了问题。我首先调用“INavigationService.NavigateAsync($"/{nameof(NavigationPage)}/{nameof(LoginPage)}");
”然后如果登录成功,我调用“INavigationService.NavigateAsync($"/{nameof(NavigationPage)}/{nameof(HomeMasterDetailPage)}");
”进入主页;问题在于,当显示主页(MasterDetailPage
)时,我不再看到“汉堡包”按钮来打开页面的“主”部分。我怀疑这可能与我错误地使用INavigationService
有关,但如果不是,我可以将其作为一个单独的问题提出。
答案 0 :(得分:1)
Prism's INavigationService
essentially maps to the Xamarin Forms INavigation
in this way: INavigationService.NavigateAsync
=> INavigation.PushAsync
(or PushModalAsync
if you set the useModal flag to true), & INavigationService.GoBackAsync
=> INavigation.PopAsync
.
The INavigationService
uses the container to resolve any pages that you specify in the Uri that you pass it and then pushes them onto the Navigation Stack. You may want to check out the various samples available, including the "HamburgerMenu" project which shows the use of a MasterDetailPage
and it uses a LoginPage.