包装 PrismForms NavigationService 的问题
Issues with wrapping PrismForms NavigationService
在 PrismForms 中,我们遇到了问题,导航到新页面后 NavigationStack 为空。这意味着在 SecondPage 上使用硬件 back-button 后,应用程序将关闭。尽管 Android 上的 header 中的 back-arrow 未显示。如果仔细观察,您可以在页面切换后的一小段时间看到 back-arrow。我想那是在清除 NavigationStack 之前。
我们在 App.xaml.cs 派生自 PrismApplication 的 OnInitialized() 中使用以下命令导航到第一页。
NavigationService.NavigateAsync("NavigationPage/StartPage");
(如果这里只导航到“StartPage”,堆栈不会被清除。)
这与 PageNavigationService.ProcessNavigationForNavigationPage(...) 调用有关
bool clearNavStack = GetClearNavigationPageNavigationStack(currentPage); PageNavigationService.ProcessNavigationForContentPage(...) 不是。
从 StartPage 到下一个我们使用 NavigateAsync("SecondPage") 导航”。这里出现了所描述的行为。
对于导航,我们使用包装 Prism NavigationService 的 class。我们将他保存为 属性 并在我们的构造函数中通过 Unity 获取他:
this.PrismNavigation = prismNavigation ?? throw new ArgumentNullException(nameof(prismNavigation));
方法“NavigateAsync”和“GoBackAsync”等我们只是通过。
通过这种方式,我们希望将 ViewModel-Project 与对 XamarinForms 的引用分开,以便以后能够使用相同的 ViewModel,例如 WPF-GUI.
为什么我们自己的NavigationService会清空栈?如果我们改为在 App.xaml.cs 中注册原始的 Prism NavigationService,则导航返回会再次按预期工作。我们在框架中找到了要点,可以通过 drity hack 避免清除,但这与 PrismForms 中实现的 navigation-logic 相悖,但我们不明白如何以正确的方式进行。
感谢您的帮助!
在找到 Brian Lagunas 在 forlast-post 中提供的一些有趣信息后,我们编辑了一些内容以使其正常工作:
https://github.com/PrismLibrary/Prism/issues/591
尽管该主题是关于其他内容的,但它导致了对覆盖导航服务的改进。
请记住,在您的视图模型中,导航服务必须按照惯例命名为 "navigationService"。此外,我们从仅将 Prism 导航服务作为参数保存为按照上面 link 中的建议从中派生。
public class MyNavigationService : UnityPageNavigationService
在 PrismForms 中,我们遇到了问题,导航到新页面后 NavigationStack 为空。这意味着在 SecondPage 上使用硬件 back-button 后,应用程序将关闭。尽管 Android 上的 header 中的 back-arrow 未显示。如果仔细观察,您可以在页面切换后的一小段时间看到 back-arrow。我想那是在清除 NavigationStack 之前。
我们在 App.xaml.cs 派生自 PrismApplication 的 OnInitialized() 中使用以下命令导航到第一页。
NavigationService.NavigateAsync("NavigationPage/StartPage");
(如果这里只导航到“StartPage”,堆栈不会被清除。)
这与 PageNavigationService.ProcessNavigationForNavigationPage(...) 调用有关 bool clearNavStack = GetClearNavigationPageNavigationStack(currentPage); PageNavigationService.ProcessNavigationForContentPage(...) 不是。
从 StartPage 到下一个我们使用 NavigateAsync("SecondPage") 导航”。这里出现了所描述的行为。
对于导航,我们使用包装 Prism NavigationService 的 class。我们将他保存为 属性 并在我们的构造函数中通过 Unity 获取他:
this.PrismNavigation = prismNavigation ?? throw new ArgumentNullException(nameof(prismNavigation));
方法“NavigateAsync”和“GoBackAsync”等我们只是通过。
通过这种方式,我们希望将 ViewModel-Project 与对 XamarinForms 的引用分开,以便以后能够使用相同的 ViewModel,例如 WPF-GUI.
为什么我们自己的NavigationService会清空栈?如果我们改为在 App.xaml.cs 中注册原始的 Prism NavigationService,则导航返回会再次按预期工作。我们在框架中找到了要点,可以通过 drity hack 避免清除,但这与 PrismForms 中实现的 navigation-logic 相悖,但我们不明白如何以正确的方式进行。
感谢您的帮助!
在找到 Brian Lagunas 在 forlast-post 中提供的一些有趣信息后,我们编辑了一些内容以使其正常工作:
https://github.com/PrismLibrary/Prism/issues/591
尽管该主题是关于其他内容的,但它导致了对覆盖导航服务的改进。
请记住,在您的视图模型中,导航服务必须按照惯例命名为 "navigationService"。此外,我们从仅将 Prism 导航服务作为参数保存为按照上面 link 中的建议从中派生。
public class MyNavigationService : UnityPageNavigationService