Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.forms 包装PrismForms NavigationService的问题_Xamarin.forms_Prism_Platform Independent_Navigationservice - Fatal编程技术网

Xamarin.forms 包装PrismForms NavigationService的问题

Xamarin.forms 包装PrismForms NavigationService的问题,xamarin.forms,prism,platform-independent,navigationservice,Xamarin.forms,Prism,Platform Independent,Navigationservice,在PrismForms中,我们遇到了一个问题,导航到新页面后,NavigationStack是空的。这意味着在使用第二页上的硬件后退按钮后,应用程序将关闭。尽管Android上标题中的后退箭头未显示。如果仔细观察,您可以在页面切换后短时间内看到后退箭头。我想那是在航标清除之前 在App.xaml.cs的OnInitialized()中,我们使用以下命令导航到第一个页面,该命令源自PrismApplication NavigationService.NavigateAsync("Navig

在PrismForms中,我们遇到了一个问题,导航到新页面后,NavigationStack是空的。这意味着在使用第二页上的硬件后退按钮后,应用程序将关闭。尽管Android上标题中的后退箭头未显示。如果仔细观察,您可以在页面切换后短时间内看到后退箭头。我想那是在航标清除之前

在App.xaml.cs的OnInitialized()中,我们使用以下命令导航到第一个页面,该命令源自PrismApplication

    NavigationService.NavigateAsync("NavigationPage/StartPage");
(如果仅导航到此处的“起始页”,堆栈不会被清除。)

这与PageNavigationService.ProcessNavigationForNavigationPage(…)调用有关 bool clearNavStack=GetClearNavigationPageNavigationStack(currentPage);而PageNavigationService.ProcessNavigationForContentPage(…)不是

从开始页到下一页,我们使用NavigateAsync(“第二页”)导航。此处显示所描述的行为

对于导航,我们使用一个类包装Prism NavigationService。我们将其作为属性,并通过构造函数中的Unity获得:

    this.PrismNavigation = prismNavigation ?? throw new ArgumentNullException(nameof(prismNavigation));
“NavigateAsync”和“GoBackAsync”等方法,我们只是通过

通过这种方式,我们希望将ViewModel项目从对XamarinForms的引用中分离出来,以便以后能够将相同的ViewModels用于例如WPF-GUI

为什么我们自己的NavigationService会清除堆栈?如果我们在App.xaml.cs中注册原始的Prism NavigationService,那么返回导航又会像预期的那样工作。我们在框架中找到了要点,可以通过简单的破解来避免清除,但这与PrismForms中实现的导航逻辑背道而驰,但我们没有了解如何以正确的方式进行


感谢您的帮助!

在上一篇文章中找到了Brian Lagunas的一些有趣信息后,我们编辑了一些内容以使其正常工作:

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

请记住,在您的viewModels中,导航服务必须按照约定命名为“navigationService”。此外,我们已将Prism导航服务作为一个参数,改为按照上面链接中的建议从中派生

    public class MyNavigationService : UnityPageNavigationService

在解析视图或ViewModel时,您似乎遇到了一个异常。在导航之前,您可以尝试解析视图模型和页面的try/catch,并记录异常。我们将尝试此操作,稍后再报告。感谢您的第一个想法。情况并非如此。一切都可以很好地解决。