Xamarin.forms MasterDetail和NavigationPage以Prism形式进行深度链接

Xamarin.forms MasterDetail和NavigationPage以Prism形式进行深度链接,xamarin.forms,prism,Xamarin.forms,Prism,我正在测试Prism窗体框架的深度链接功能。我目前的情况是,我有一个MasterDetailPage,其中一个菜单是Master。当我单击菜单项时,详细信息应更改为特定页面,并使用干净的NavigationPage作为容器 当我检查Prism表单时,它显示了MasterDetail导航的示例,但不包括导航页面 因此,我在启动时有这个(绝对的)deeplink结构:/MasterDetailPage/NavigationPage/MyFirstPage 然后,我希望第二个菜单项链接到新的Navig

我正在测试Prism窗体框架的深度链接功能。我目前的情况是,我有一个MasterDetailPage,其中一个菜单是Master。当我单击菜单项时,详细信息应更改为特定页面,并使用干净的NavigationPage作为容器

当我检查Prism表单时,它显示了MasterDetail导航的示例,但不包括导航页面

因此,我在启动时有这个(绝对的)deeplink结构:/MasterDetailPage/NavigationPage/MyFirstPage

然后,我希望第二个菜单项链接到新的NavigationPage: /MasterDetailPage/NavigationPage/MySecondPage


我目前的解决方法是进行绝对深度链接,但我想知道是否有更好的方法?Prism PageNavigationService检查段类型是否与当前详细信息类型相同。但由于这两个都是NavigationPage,它会尝试在现有的NavigationPage中添加新页面。此时,它还关闭了菜单图标(至少在iOS上)。

实际上,沙盒应用程序在MasterDetail中使用了导航页面:

出于性能原因,Prism重用了详细信息页面,但它的工作方式与您认为的不同。虽然它会将新页面添加到NavigationPage的NavigationStack中,但它也会从堆栈中删除上一页。这将保持NavigationStack处于正确的状态

您看到的图标行为是由于Xamarin.Forms中的一个已确认错误造成的。您可以在此处关注此问题:


一旦Xamarin修复了这个bug,我会将修复发布到Nuget。同时,解决这个问题的唯一方法是分叉Prism代码库并删除页面类型检查。

Aha,我当时的思路是正确的,我已经分叉Prism代码库以了解PageNavigationService的内部行为。但我不知道Xamarin的那个bug。谢谢你的帮助。