在PrismForms中,我们遇到了一个问题,即导航到新页面后,NavigationStack是空的。这意味着在使用SecondPage上的硬件后退按钮之后,应用程序就关闭了。尽管没有显示Android标题中的后箭头。如果仔细观察,您可以在页面切换后的短时间内看到后箭头。我想那是在NavigationStack被清除之前。
到第一个页面,我们在OnInitialized()中使用App.xaml.cs中的以下命令导航,该命令是从PrismApplication派生的。
NavigationService.NavigateAsync("NavigationPage/StartPage");(如果只导航到这里的“StartPage”,堆栈就不会被清除。)
这与PageNavigationService.ProcessNavigationForNavigationPage(...)有关调用bool clearNavStack = PageNavigationService.ProcessNavigationForContentPage(...)和不。
从StartPage到下一个,我们使用NavigateAsync(“SecondPage”)“导航。在这里,描述的行为出现了。
对于导航,我们使用一个包装棱镜NavigationService的类。我们将他作为一种财产持有,并在构造函数中通过Unity获得他:
this.PrismNavigation = prismNavigation ?? throw new ArgumentNullException(nameof(prismNavigation));我们刚刚经过的方法“NavigateAsync”和“GoBackAsync”等等。
通过这种方式,我们希望将ViewModel从对XamarinForms的引用中分离出来,以便以后能够使用相同的ViewModels,例如WPF。
为什么堆栈被我们自己的NavigationService清除了?如果我们在App.xaml.cs中注册原始的棱镜App.xaml.cs,导航返回将再次像预期的那样工作。我们在框架中找到了要点,可以避免使用枯燥的攻击,但这违背了在PrismForms中实现的导航逻辑,但我们不知道如何正确地实现它。
所有的帮助都很感激!
发布于 2017-03-31 13:04:27
在最后一篇文章中,我们发现了Brian的一些有趣的信息之后,我们编辑了一些东西来让它工作:
https://github.com/PrismLibrary/Prism/issues/591
尽管该主题是关于其他内容的,但它导致了覆盖导航服务的改进。
请记住,在您的viewModels中,导航服务必须按照约定命名为"navigationService“。此外,我们从仅仅将棱镜导航服务作为参数保存到上面链接中所建议的从它派生出来。
public class MyNavigationService : UnityPageNavigationServicehttps://stackoverflow.com/questions/43121339
复制相似问题