包装PrismForms NavigationService的问题

时间:2017-03-30 14:52:21

标签: xamarin.forms prism platform-independent navigationservice

在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中实现的导航逻辑,但我们不明白如何以正确的方式执行此操作。

每一个帮助都赞赏!

1 个答案:

答案 0 :(得分:0)

我们编辑了一些事情,以便在Brian Lagunas在forlast-post中找到一些有趣的信息之后使其工作:

https://github.com/PrismLibrary/Prism/issues/591

虽然主题是关于其他内容的,但它导致了覆盖导航服务的改进。

请记住,在您的viewModels中,导航服务必须按照惯例命名为“navigationService”。此外,我们只是将棱镜导航服务作为参数从上面的链接中建议从中导出。

    public class MyNavigationService : UnityPageNavigationService
相关问题