在PrismForms中我们遇到了问题,导航到新页面后NavigationStack是空的。这意味着在使用SecondPage上的硬件后退按钮后,应用程序将关闭。虽然Android上标题中的后箭头未显示。如果仔细观察,您可以在切换页面后的短时间内看到后箭头。我猜想在NavigationStack被清除之前。
在我们的App.xaml.cs中,我们使用OnInitialized()中的以下命令导航到第一页,该命令源自PrismApplication。
NavigationService.NavigateAsync("NavigationPage/StartPage");
(如果此处仅导航到“StartPage”,则堆栈不会被清除。)
这与使用PageNavigationService.ProcessNavigationForNavigationPage(...)调用有关 bool clearNavStack = GetClearNavigationPageNavigationStack(currentPage);和PageNavigationService.ProcessNavigationForContentPage(...)没有。
从StartPage到下一个,我们使用NavigateAsync(“SecondPage”)进行导航。此处显示所描述的行为。
对于导航,我们使用包装Prism NavigationService的类。我们把他当作一个财产,并在我们的构造函数中通过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中实现的导航逻辑,但我们不明白如何以正确的方式执行此操作。
每一个帮助都赞赏!
答案 0 :(得分:0)
我们编辑了一些事情,以便在Brian Lagunas在forlast-post中找到一些有趣的信息之后使其工作:
https://github.com/PrismLibrary/Prism/issues/591
虽然主题是关于其他内容的,但它导致了覆盖导航服务的改进。
请记住,在您的viewModels中,导航服务必须按照惯例命名为“navigationService”。此外,我们只是将棱镜导航服务作为参数从上面的链接中建议从中导出。
public class MyNavigationService : UnityPageNavigationService