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

时间:2020-06-01 11:08:28

标签: xamarin.forms prism

我有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. 通常的导航命令 异步void ExecuteCommandName(字符串参数) { 等待NavigationService.NavigateAsync(parameter); }

请帮助

2 个答案:

答案 0 :(得分:0)

我想在这里解决一些问题...

<?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。 / li>
  • MasterDetailPage ...这是您要从中导航的实际根导航上下文。这是需要ViewModel的页面,您已在其中明确设置了AutowireViewModel
  • 详细信息页面(NavigationPage中的MwaslaContactUsPage)...尽管从技术上讲,这对于Xamarin.Forms应用程序是正确的,并且允许您导航到/MwaslaMasterDetailPage,但不建议您执行此操作。相反,您应该在设置明细/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的经典“汉堡”外观,您的“细节”必须为NavigationPage。为了正确实现此目的,您应避免显式设置“详细信息页面”,以便正确导航至MasterDetailPage中的任何详细信息页面,即/MyMasterDetailPage/NavigationPage/ViewA
  • 考虑上一条注释时,请删除诸如/MyMasterDetailPage/NavigationPage/MyMasterDetailPage之类的引用

从主菜单又称“菜单”导航

请记住,当您从母版页或菜单进行导航时,您根本不是在母版页中进行导航,而是在MasterDetailPage中进行导航。这样,您只需对诸如NavigationPage/ViewANavigationPage/ViewB之类的相对导航进行操作,即可更改详细信息页面。

答案 1 :(得分:0)

最终有效

感谢Dan Siegel提供详细的答案

像魔术一样工作