2012-12-11 4 views
11

Po załadowaniu strony UserLogin chcę sprawdzić bazę danych użytkowników, a jeśli ona nie istnieje lub nie można jej odczytać, chcę skierować ją do NewUser strona.Nie można przejść do stron w aplikacji Metro systemu Windows za pomocą C#

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    CheckForUser(); 
    if (UserExists == false) 
     this.Frame.Navigate(typeof(NewUser)); 
} 

Problem polega na tym, że nigdy nie przejdzie na NewUser, nawet kiedy wykomentuj stan if.

+2

masz sprawdzić MSDN ** tu jest link http://msdn.microsoft.com/en-us/library/windows/apps/br211386.aspx ** – MethodMan

+0

Nie sądziłem, że można poruszać się po Metoda 'OnNavigatedTo', ponieważ nadal jesteś w trakcie nawigacji. – Trisped

Odpowiedz

14

Navigate nie może być wywołana bezpośrednio tworzą OnNavigatedTo metody. Należy powołać swój kod przez Dispatcher i będzie działać:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    CheckForUser(); 
    if (UserExists == false) 
     Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
          () => this.Frame.Navigate(typeof(NewUser))); 
} 
+0

Upewnij się, że wywołujesz funkcję base.OnNavigatedTo (e) w górnej części wywołania metody overrided. Miałem ten sam kod, bez podstawy.OnNavigatedTo (e) i wciąż otrzymywałem wyjątek. Ta odpowiedź pomogła mi, dziękuję! –

0

można spróbować i zobaczyć, czy to działa

frame.Navigate(typeof(myPage)); // the name of your page replace with myPage 

pełny Przykład

var cntnt = Window.Current.Content; 
    var frame = cntnt as Frame; 

    if (frame != null) 
    { 
     frame.Navigate(typeof(myPage)); 
    } 
    Window.Current.Activate(); 

lub

jeśli chcesz używać 3rd narzędzia firmy jak Telerik tego linku, a także

Classic Windows Forms, Stunning User Interface

0

Widzę, że zastępujesz metodę OnNavigatedTo, ale nie wywołuj metody bazowej. To może być źródłem problemu. Spróbuj zadzwonić metody bazowej przed jakąkolwiek logiką:

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 
    CheckForUser(); 
    if (UserExists == false) 
     this.Frame.Navigate(typeof(NewUser)); 
} 
0

Zastosowanie Dispatcher.RunIdleAsync odłożyć swoją nawigację do innej strony, dopóki strona UserLogin jest całkowicie załadowany.

0

Pozostali są poprawne, ale ponieważ Dyspozytor nie działa z modelu widoku, oto jak to zrobić tam:

SynchronizationContext.Current.Post((o) => 
{ 
    // navigate here 
}, null); 
1

Dzieje się tak dlatego, że aplikacja próbuje poruszać przed bieżącej ramki całkowicie załadowany. Dyspozytor może być dobrym rozwiązaniem, ale musisz wykonać poniższą składnię.

przy użyciu Windows.UI.Core;

private async void to_navigate() 
    { 
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => this.Frame.Navigate(typeof(MainPage))); 
    } 
  1. Wymień tytułowa z wybraną nazwą strony.
  2. Wywołanie funkcji to_navigate().
Powiązane problemy