Xamarin.forms 无法导航到母版详细信息页

Xamarin.forms 无法导航到母版详细信息页,xamarin.forms,prism,Xamarin.forms,Prism,我有一个axamarin应用程序,它有一个登录页面,可以指向模块启动器登录页面 其中一个模块是母版详细信息页面 在VS(调试/发布)以太模拟器或真实设备上,一切都正常工作 然而,在VS之外,从模拟器或设备本身,如果我运行应用程序,一切正常,除了导航到主控详细信息页面(没有任何响应) 我尝试直接导航到一个详细的页面(没有母版页),它可以工作 我尝试在开始处放置“/”或删除它,我尝试使用“/NavigationPage”或不使用它 仍然无法从应用程序外部工作VS 我做了最新的更新(7.2.0.142

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

在VS(调试/发布)以太模拟器或真实设备上,一切都正常工作

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

我尝试直接导航到一个详细的页面(没有母版页),它可以工作 我尝试在开始处放置“/”或删除它,我尝试使用“/NavigationPage”或不使用它

仍然无法从应用程序外部工作VS

我做了最新的更新(7.2.0.1422)

以下是我的xml代码:

  • 登录页的导航按钮

            <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.母版详细信息页it self

    <?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>
    
    
    

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

  • 请帮忙

    我想在这里解决一些问题

    
    
    核心概念 在这个示例中,基本上有3页需要理解

    • 母版页(MwaslaMasterPageMenu)。。。如果您想将母版的视图分离到另一个XAML页面中,这没关系,但请记住,这不应该有自己的ViewModel,也不应该尝试在该页面上设置AutowireViewModel
    • 母版详细信息页。。。这是您从中导航的实际根导航上下文。这是需要已显式设置AutowireViewModel的ViewModel的页面
    • 详细信息页面(导航页面中的MwaslaContactUsPage)。。。虽然这在技术上对于Xamarin.Forms应用程序是正确的,并且允许您导航到
      /MwaslaMasterDetailPage
      ,但不建议您这样做。相反,您应该明确设置详细信息
      /MwaslaMasterDetailPage/NavigationPage/MwaslaContactUsPage
    导航问题 Prism.Forms中的导航基于要在上下文中导航的页面。这就是为什么过去要求导航服务是命名参数的原因。在Prism解析ViewModel之前,它首先构造NavigationService的一个新实例,并向其提供ViewModel将附加到的导航上下文(Xamarin.Forms.Page,又称视图)

    修复
    • 首先,您需要将所有逻辑从MwaslaMasterPageMenuViewModel移动到MwaslaMasterDetailPageViewModel
    • 摆脱MwaslaMasterPageMenuViewModel并从MwaslaMasterPageMenu.xaml中删除Autowire属性
    • 请记住,MasterDetailPage是指NavigationRoot。这意味着,如果您查看MasterDetailPage的父级,它应该是您的应用程序
    • 记住,为了获得人们通常想要的MasterDetailPage的经典“汉堡包”外观,您的详细信息需要是导航页面。为了正确实现这一点,您应该避免显式设置详细信息页面,以便正确导航到MasterDetailPage中的任何详细信息页面,即
      /MyMasterDetailPage/NavigationPage/ViewA
    • 在考虑前面的注释时,请删除诸如
      /MyMasterDetailPage
      /NavigationPage/MyMasterDetailPage
    从主菜单(又称“菜单”)导航 请记住,当您从母版页即菜单导航时,您根本不是从母版页导航,而是从母版详细信息页导航。因此,您只需执行相对导航,如
    NavigationPage/ViewA
    NavigationPage/ViewB
    ,即可更改详细信息页面。

    最后,它会起作用

    谢谢Dan Siegel的详细回答


    它像魔术一样工作

    从ContentPage导航到Master Detail Page不是一个好的设计。最好在NavigationCommand中设置
    MainPage
    <代码>Application.Current.MainPage=new MwaslaMasterDetailPage()这是Prism for Xamarin表单的文档,它从vs 2019开始运行,但不是独立运行的???检查。我确实使用了您的方法应用程序。Current.MainPage=new MwaslaMasterDetailPage();我得到了同样的行为,如果应用程序是从VS运行的,那么一切都正常工作,但是如果它是作为独立应用程序运行的,它根本不导航?如果该页面不是主详细页面(任何包含的页面),它可以工作?????您可以共享您的示例,这样我就可以在我这边对其进行测试。非常感谢您的详细回复,我将完全按照您的步骤返回给您,但我有一个大问号,为什么所有东西都可以从Visual Studio正确运行,如果逻辑不正确,它就不应该运行。我想说的是,主控详细信息页面是模块的根,而不是根据客户要求的应用程序,同样在模块主页导航中,我在binning中添加了“/”,要将根导航设置为注意,无论何时导航uri以
    /
    开头,您都将重置NavigationStack。。。本质上,它相当于
    app.MainPage=newsomeotherpage()
    。我也不知道你所说的从Visual Studio运行是什么意思。当我从VS按F5并将应用程序部署到真实设备或模拟器时,“导航到母版详细信息”页面在调试和发布模式下工作正常