Итак, я разрабатывал приложение в течение 2 месяцев с помощью призмы, и только сейчас я понял, что метод OnNavigatedTo вызывается дважды, когда я выбираю элемент из MasterDetailPage.
Понятия не имею, почему это происходит, я уверен, что что-то упустил, но я около двух дней пытаюсь это решить.
Я добавлю сюда код, и если вам, ребята, понадобится больше информации, я могу опубликовать более подробно.
Наблюдение: когда я нахожусь на странице «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!");
}
}
Типы регистра этих трех примеров:
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");