Почему ждут _navigationService.NavigateAsync не работает в функции OnNavigatedTo

#xamarin #prism

#xamarin #призма

Вопрос:

Занимался этим несколько дней. Очень простая логика. Перейдите на домашнюю страницу, если bla = true, пропуская страницу входа.

Я сократил код, чтобы продемонстрировать это. Кнопка входа в систему перемещается как обычно. Однако страница входа в систему должна быть фактически пропущена, поскольку OnNavigatedTo имеет ту же команду NavigateAsync.

Побочный эффект, который не имеет смысла, заключается в том, что код HomeViewModel запускается при запуске функции OnNavigatedTo.

  public class LoginViewModel : AppMapViewModelBase
{
    private readonly INavigationService _navigationService;

    public DelegateCommand LoginCommand { get; private set; }

    public LoginViewModel(INavigationService navigationService) : base(navigationService)
    {
        LoginCommand = new DelegateCommand(LoginUserAsync);
        _navigationService = navigationService;
       

       
    }


    private async void LoginUserAsync()
    {
       
        //This works as expected
        await _navigationService.NavigateAsync("/MasterDetail/NavigationPage/Home");
    }


    public override async void OnNavigatedTo(INavigationParameters parameters)
    {
        base.OnNavigatedTo(parameters);
        //This Executes the code on Home but does not Jump there.
        await _navigationService.NavigateAsync("/MasterDetail/NavigationPage/Home");
    }


   
}
 

Код HomeViewModel, который каким-то образом запускается, даже не переходя на домашнюю страницу.

  public HomeViewModel(INavigationService navigationService) : base (navigationService)
    {
        Debug.WriteLine("............HomeViewModel Loaded.................................");
    } 
 

Ответ №1:

Изменение основного инициализированного в приложении с

 await NavigationService.NavigateAsync("NavigationPage/Login");
 

Для

 await NavigationService.NavigateAsync("/Login");
 

останавливает передачу NavigateAsync(«/….. через инициализированное приложение

Понятия не имею, почему, но это работает.