Xamarin.forms 无法导航到母版详细信息页
我有一个axamarin应用程序,它有一个登录页面,可以指向模块启动器登录页面 其中一个模块是母版详细信息页面 在VS(调试/发布)以太模拟器或真实设备上,一切都正常工作 然而,在VS之外,从模拟器或设备本身,如果我运行应用程序,一切正常,除了导航到主控详细信息页面(没有任何响应) 我尝试直接导航到一个详细的页面(没有母版页),它可以工作 我尝试在开始处放置“/”或删除它,我尝试使用“/NavigationPage”或不使用它 仍然无法从应用程序外部工作VS 我做了最新的更新(7.2.0.1422) 以下是我的xml代码:Xamarin.forms 无法导航到母版详细信息页,xamarin.forms,prism,Xamarin.forms,Prism,我有一个axamarin应用程序,它有一个登录页面,可以指向模块启动器登录页面 其中一个模块是母版详细信息页面 在VS(调试/发布)以太模拟器或真实设备上,一切都正常工作 然而,在VS之外,从模拟器或设备本身,如果我运行应用程序,一切正常,除了导航到主控详细信息页面(没有任何响应) 我尝试直接导航到一个详细的页面(没有母版页),它可以工作 我尝试在开始处放置“/”或删除它,我尝试使用“/NavigationPage”或不使用它 仍然无法从应用程序外部工作VS 我做了最新的更新(7.2.0.142
<ImageButton Grid.Row="1"
Grid.Column="2"
HeightRequest="80"
BackgroundColor="WhiteSmoke"
Source="homescreenbtn12.png"
Command="{Binding NavigationCommand}"
CommandParameter="NavigationPage/MwaslaMasterDetailPage"
IsVisible="{Binding CurrentUser.IsTPEmplyess}"/>
<?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
- 母版详细信息页。。。这是您从中导航的实际根导航上下文。这是需要已显式设置AutowireViewModel的ViewModel的页面
- 详细信息页面(导航页面中的MwaslaContactUsPage)。。。虽然这在技术上对于Xamarin.Forms应用程序是正确的,并且允许您导航到
,但不建议您这样做。相反,您应该明确设置详细信息/MwaslaMasterDetailPage
/MwaslaMasterDetailPage/NavigationPage/MwaslaContactUsPage
- 首先,您需要将所有逻辑从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并将应用程序部署到真实设备或模拟器时,“导航到母版详细信息”页面在调试和发布模式下工作正常