【发布时间】:2017-09-26 19:35:01
【问题描述】:
我正在尝试使用 Xamarin Forms 和 Prism 实现登录场景。
我的应用程序根页面是一个MasterDetail页面(HomeMasterDetailPage);这用于提供侧边菜单。
我想要做的是将带有 Content 的 HomeMasterDetailPage 页面设置为 LoginPage 的实例。当用户登录时,Content 应更改为 HomeDetailContentPage 的实例。使用返回按钮应该无法返回到LoginPage。
我正在使用 Prism Forms 中的 NavigationService。
我的创业是这样的……
public partial class App : PrismApplication {
public App(IPlatformInitializer initializer = null)
: base(initializer) {
}
protected override void OnInitialized() {
InitializeComponent();
Uri uri = new Uri($"/{nameof(NavigationPage)}/{nameof(HomeMasterDetailPage)}/{nameof(HomeDetailContentPage)}", UriKind.Absolute);
var settings = Container.Resolve<SettingsService>();
if (!settings.DeviceUserID.HasValue)
uri = new Uri($"/{nameof(NavigationPage)}/{nameof(HomeMasterDetailPage)}/{nameof(LoginPage)}", UriKind.Absolute);
NavigationService.NavigateAsync(uri);
}
protected override void RegisterTypes() {
Container.RegisterTypeForNavigation<NavigationPage>();
Container.RegisterTypeForNavigation<LoginPage, LoginPageViewModel>();
Container.RegisterTypeForNavigation<HomeMasterDetailPage, HomePageViewModel>();
Container.RegisterTypeForNavigation<HomeMasterContentPage>();
Container.RegisterTypeForNavigation<HomeDetailContentPage>();
}
}
如果用户尚未登录,这将正确显示HomeMasterDetailPage 中的LoginPage,如果用户已登录,则正确显示同一HomeMasterDetailPage 中的HomeDetailContentPage。
实际登录时出现问题;以下是LoginPage...的视图模型中的代码...
protected async Task ExecuteLoginCommand() {
Uri uri = new Uri($"/{nameof(NavigationPage)}/{nameof(HomeMasterDetailPage)}/{nameof(HomeDetailContentPage)}", UriKind.Absolute);
await this.navigationService.NavigateAsync(uri);
}
据我了解,通过使用绝对 Uri 这应该重置导航,以便新的页面排列 (/NavigationPage/HomeMasterDetailPage/HomeDetailContentPage) 位于堆栈的顶部和底部,然后允许我从那里继续前进.相反,我得到了一个未处理的异常(在 Android 7.0 上)。
我做错了什么?
注意:我看到的所有示例的根目录都有MasterDetailPage,Content 设置为NavigationPage/ContentPage;当我尝试这个时,我没有遇到异常,但是侧边菜单在 MasterDetailPage 中的操作方式不同 - 当您点击“汉堡包”时,侧边菜单会滑入所有内容(包括操作/标题栏),这是唯一的方法清除它是在滑入的侧面菜单之外点击,而当我在NavigationPage 中显示MasterDetailPage 时,侧面菜单会滑入操作/标题栏下方,并且汉堡包变为可以单击隐藏的箭头再次打开侧边菜单。
【问题讨论】:
标签: xamarin.forms prism-6