2015-02-10 2 views
0

у меня есть следующие страницы навигации в моем приложении:Auto отклонять Войти страницу при входе

AnyPage -> Login -> Register 

Когда пользователь регистрируется, он автоматически писаться. Поэтому я хочу, чтобы страница входа была автоматически закрыта, если пользователь вернется к ней и зарегистрирован.

Я попытался добавить код к методу LoginPage.onNavigatedTo, но он не работает.

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     this.navigationHelper.OnNavigatedTo(e); 
     if(AccountController.isLogged()){ 
      Frame.GoBack(); 
     } 
    } 

Как это сделать?

ответ

0

Методы OnNavigatedTo и OnNavigatedFrom являются частью продолжающейся операции навигации. Когда вы пытаетесь начать новую навигацию, пока она еще не началась, методы навигации остановятся и вернут false.

Простой трюк: сделайте свой OnNavigatedTo асинхронным и добавьте задержку перед навигацией назад.

protected override async void OnNavigatedTo(NavigationEventArgs e) 
{ 
    this.navigationHelper.OnNavigatedTo(e); 
    if(AccountController.isLogged()){ 
     await Task.Delay(1); 
     Frame.GoBack(); 
    } 
} 

Причина, по которой это работает: Навигация осуществляется по потоку пользовательского интерфейса. Поскольку методы событий возвращаются в пустоту, они не ожидаются, и если вы возвращаете задачу внутри них, текущий вызывающий абонент заканчивает свою текущую задачу. Все, что приходит после ожидания, помещается в очередь Диспетчеру и заканчивается, как только у него есть время для него (что сразу после завершения операции навигации).