因此,我已经使用 prism 开发了一个应用程序 2 个月,现在我意识到当我从 MasterDetailPage 中选择一个项目时,OnNavigedTo 方法被调用了两次。
我不知道为什么会发生这种情况,我确信我错过了一些东西,但我大约需要两天时间来解决它。
我将在这里放置一些代码,如果你们需要更多信息,我可以发布更详细的信息。
观察:当我在页面“A”中并在主详细信息项目列表中选择页面“A”时,OnNavigedTo 仅被调用一次,但是当我在页面“B”中并选择页面“ A”,OnNavigedTo 被调用两次。
从现在开始,谢谢你们,并对我的无知表示歉意。
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>();
如何从主要主详细信息 PageViewModel 调用其他页面:
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");