无法导航到主详细信息页面
Can not Navigate to Master Detail Page
我有 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.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>
- 正常的导航命令
异步无效 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/ViewA
或 NavigationPage/ViewB
之类的相对导航。
终于成功了
感谢 Dan Siegel 的详细回答
它就像魔术一样工作
我有 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.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>
- 正常的导航命令 异步无效 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/ViewA
或 NavigationPage/ViewB
之类的相对导航。
终于成功了
感谢 Dan Siegel 的详细回答
它就像魔术一样工作