无法导航到主详细信息页面

Can not Navigate to Master Detail Page

我有 axamarin 应用程序,其登录页面指向模块启动器登录页面 其中一个模块是主详细信息页面

VS(调试/发布)以太模拟器或真实设备一切正常

但是在 VS 之外,从模拟器或设备本身如果我 运行 应用程序一切正常,除了导航到主详细信息页面(没有任何响应)

我尝试直接导航到详细页面(没有母版页)它有效 我试着在开头放一个“/”或删除它,我试过“/NavigationPage”或没有它

仍然无法在 VS 之外的应用程序中工作。

我做了最新的更新 (7.2.0.1422)

这是我的 xml 代码:

  1. 登陆页面的导航按钮

            <ImageButton Grid.Row="1" 
                         Grid.Column="2"
                         HeightRequest="80"
                         BackgroundColor="WhiteSmoke"
                         Source="homescreenbtn12.png"
                         Command="{Binding NavigationCommand}"
                         CommandParameter="NavigationPage/MwaslaMasterDetailPage"
                         IsVisible="{Binding CurrentUser.IsTPEmplyess}"/>
    

2.master 详情页面自行

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:prism="http://prismlibrary.com"
              prism:ViewModelLocator.AutowireViewModel="True"
              x:Class="TPS.Modules.Mwasla.Views.MwaslaMasterDetailPage"
              xmlns:views="clr-namespace:TPS.Modules.Mwasla.Views;assembly=TPS.Modules.Mwasla">

<MasterDetailPage.Master>
    <views:MwaslaMasterPageMenu/>
</MasterDetailPage.Master>

<MasterDetailPage.Detail>
    <NavigationPage>

        <x:Arguments>
            <views:MwaslaContactUsPage/>
        </x:Arguments>
    </NavigationPage>
</MasterDetailPage.Detail>

  1. 正常的导航命令 异步无效 ExecuteCommandName(字符串参数) { 等待NavigationService.NavigateAsync(参数); }

请帮忙

我想在这里解决几个问题...

<?xml version="1.0" encoding="utf-8" ?>
<MasterDetailPage xmlns="http://xamarin.com/schemas/2014/forms"
              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
              xmlns:prism="http://prismlibrary.com"
              prism:ViewModelLocator.AutowireViewModel="True"
              x:Class="TPS.Modules.Mwasla.Views.MwaslaMasterDetailPage"
              xmlns:views="clr-namespace:TPS.Modules.Mwasla.Views;assembly=TPS.Modules.Mwasla">

<MasterDetailPage.Master>
    <views:MwaslaMasterPageMenu/>
</MasterDetailPage.Master>

<MasterDetailPage.Detail>
    <NavigationPage>
        <x:Arguments>
            <views:MwaslaContactUsPage/>
        </x:Arguments>
    </NavigationPage>
</MasterDetailPage.Detail>

核心概念

在此示例中,基本上有 3 个页面需要理解...

  • 母版页 (MwaslaMasterPageMenu)...如果您想将母版的视图分离到另一个 XAML 页面中,这很好,但请记住,这不应该有自己的 ViewModel,也不应该尝试设置该页面上的 AutowireViewModel。
  • MasterDetailPage...这是您从中导航的实际根导航上下文。这是需要您已在
  • 上明确设置 AutowireViewModel 的 ViewModel 的页面
  • 详细信息页面(NavigationPage 中的 MwaslaContactUsPage)...虽然这对于 Xamarin.Forms 应用在技术上是正确的,并且允许您导航到 /MwaslaMasterDetailPage,但不建议您这样做。您应该明确设置 Detail /MwaslaMasterDetailPage/NavigationPage/MwaslaContactUsPage

导航问题

Prism.Forms 中的导航基于您要在上下文中导航的页面。这就是为什么过去要求导航服务是命名参数的原因。在 Prism 解析 ViewModel 之前,它首先构建一个新的 NavigationService 实例并为其提供 ViewModel 将附加到的导航上下文(Xamarin.Forms.Page 也就是 View)。

修复

  • 首先,您需要将所有逻辑从 MwaslaMasterPageMenuViewModel 移至 MwaslaMasterDetailPageViewModel
  • 删除 MwaslaMasterPageMenuViewModel 并从 MwaslaMasterPageMenu.xaml
  • 中删除 AutowireProperty
  • 请记住,MasterDetailPage 就是 NavigationRoot。这意味着如果您查看 MasterDetailPage 的 Parent,它应该是您的 App。
  • 请记住,为了获得人们通常希望使用 MasterDetailPage 的经典 "Hamburger" 外观,您的 Detail 需要是 NavigationPage。为了正确地实现这一点,您应该避免明确设置详细信息页面,以便您正确导航到 MasterDetailPage 中的任何详细信息页面,即 /MyMasterDetailPage/NavigationPage/ViewA
  • 在考虑之前的评论时,请删除 /MyMasterDetailPage/NavigationPage/MyMasterDetailPage
  • 等引用

从大师导航又名"Menu"

请记住,当您从母版页(即菜单)导航时,您根本不是从母版页导航,而是从 MasterDetailPage 导航。因此,对于任何会更改详细信息页面的内容,您只需执行 NavigationPage/ViewANavigationPage/ViewB 之类的相对导航。

终于成功了

感谢 Dan Siegel 的详细回答

它就像魔术一样工作