Prism Forms 中的 MasterDetail 和 NavigationPage 深度链接

MasterDetail and NavigationPage deeplinking in Prism Forms

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

当我检查 Prism Forms 的 Sandbox example 时,它显示了 MasterDetail 导航的示例,但不包括导航页面。

所以我在启动时有这个(绝对)深度link结构:/MasterDetailPage/NavigationPage/MyFirstPage

然后我希望第二个菜单项 link 到一个新的 NavigationPage: /MasterDetailPage/NavigationPage/MySecondPage

我目前的解决方法是做absolute deeplinking,但我想知道是否有更好的方法? Prism PageNavigationService 检查段类型是否与当前的详细信息类型相同。但由于它们都是 NavigationPage,它会尝试在现有的 NavigationPage 中添加新页面。在那一刻它也杀死了菜单图标(至少在 iOS)。

实际上,Sandbox 应用确实在 MasterDetail 中使用了 NavigationPages:https://github.com/PrismLibrary/Prism/blob/master/Sandbox/Xamarin/HelloWorld/HelloWorld/HelloWorld/Views/MyMasterDetail.xaml

Prism 出于性能原因重用详细信息页面,但它并不像您想象的那样工作。虽然它确实将新页面添加到 NavigationPage 的 NavigationStack,但它也会从堆栈中删除前一个页面。这使 NavigationStack 保持在正确的状态。

您看到的图标行为是由于 Xamarin.Forms 中已确认的错误。您可以在此处关注此问题:https://bugzilla.xamarin.com/show_bug.cgi?id=41038

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