【发布时间】:2018-10-19 14:49:12
【问题描述】:
所以,我已经用 prism 开发了 2 个月的应用程序,现在我意识到当我从 MasterDetailPage 中选择一个项目时,方法 OnNavigatedTo 被调用了两次。
我不知道为什么会这样,我确定我遗漏了一些东西,但我大约需要两天时间才能解决它。
我会在这里放一些代码,如果你们需要更多信息,我可以发布更详细的信息。
观察:当我在页面“A”并且我在主从项目列表中选择页面“A”时,OnNavigatedTo 只被调用一次,但是当我在页面“B”并且我选择页面“A”,OnNavigatedTo 被调用了两次。
从现在开始,谢谢你们,对无知感到抱歉。
MasterDetailPage MVVM:
public class PrincipalMasterDetailPageViewModel : ViewModelBase {
public ObservableCollection<PrincipalMasterPageItem> MenuItems { get; set; }
public PrincipalMasterDetailPageViewModel(INavigationService navigationService) : base(navigationService)
{
MenuItems = new ObservableCollection<PrincipalMasterPageItem>();
}
public async override void OnNavigatedTo(NavigationParameters parameters) {
base.OnNavigatedTo(parameters);
.. Here I'm calling an API, thats why I have the async
}
}
自定义导航页面 MVVM:
public class PrincipalNavigationPageViewModel : ViewModelBase {
public PrincipalNavigationPageViewModel(INavigationService navigationService) : base(navigationService) {
}
}
当我在 masterdetailpage 项目列表中选择项目时实际显示的页面:
public class NewPageTestViewModel : ViewModelBase
{
public NewPageTestViewModel(INavigationService navigationService) : base(navigationService)
{
}
public override void OnNavigatedTo(NavigationParameters parameters)
{
base.OnNavigatedTo(parameters);
Debug.WriteLine("Calling twice HERE!");
}
}
这三个例子的RegisterTypes:
containerRegistry.RegisterForNavigation<PrincipalMasterDetailPage>();
containerRegistry.RegisterForNavigation<PrincipalNavigationPage>();
containerRegistry.RegisterForNavigation<NewPageTest>();
如何从 PrincipalMasterDetailPageViewModel 调用其他页面:
NavigationService.NavigateAsync(string.Format("PrincipalNavigationPage/{0}", item.TargetPageName));
在 App.cs 中我开始如下,因为我首先需要登录页面:
protected override async void OnInitialized()
{
InitializeComponent();
await NavigationService.NavigateAsync("LoginPage");
}
当用户登录时,它会像这样导航:
await NavigationService.NavigateAsync("/PrincipalMasterDetailPage/PrincipalNavigationPage/WhateverPageIWantTo");
【问题讨论】:
-
如何在容器中注册视图以及如何调用
NavigateTo?你能提供一些代码吗? -
@Mardukar 当然,我已经用你想要的信息编辑了帖子。
-
还没有工作... =[
-
不,从 A 导航到 B:调用两次(无论我导航多少次)从 A 导航到 A:调用一次
-
@MarcioE.H github.com/PrismLibrary/Prism/issues/…