2012-12-11 2 views
11

UserLogin 페이지가로드 될 때 사용자 데이터베이스를 확인하려고하지만 존재하지 않거나 읽을 수없는 경우 직접 보내고 싶습니다. NewUser 페이지 Windows 메트로 응용 프로그램에서 페이지를 탐색 할 수 없습니다. C#

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

문제

는 내가 if 조건을 주석 경우에도, NewUser로 이동하지 않을 것입니다. 이

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

전체 예제를

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

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

또는

를 작동하는 경우 여러분이이 링크를 시도 Telerik 같은 타사 도구를 사용하려면

+2

확인 하시겠습니까 ** 여기 링크입니다 http://msdn.microsoft.com/en-us/library/windows/apps/br211386.aspx ** – MethodMan

+0

나는 네가 탐색 할 수 있다고 생각하지 않았다. 'OnNavigatedTo' 메쏘드를 사용할 수 있습니다. – Trisped

답변

14

Navigate 직접 OnNavigatedTo 방법을 형성 호출 할 수 없습니다. 당신은 Dispatcher를 통해 코드를 호출해야하며 작동합니다 :하고 UserLogin 페이지가 완전히로드 될 때까지

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

재정의 된 메서드 호출의 맨 위에있는 base.OnNavigatedTo (e)를 호출해야합니다. 나는이 같은 코드를 가지고 있었고 base.NnNavigatedTo (e)를 빼고 여전히 예외를 얻고 있었다. 이 대답은 나를 도왔다, 고마워! –

0

OnNavigatedTo 메서드를 재정의하지만 기본 메서드를 호출하지 않습니다. 문제의 원인 일 수 있습니다. 어떤 논리하기 전에 기본 메소드를 호출 해보십시오 :

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

사용 Dispatcher.RunIdleAsync 다른 페이지로 탐색을 연기 할 수 있습니다.

0

다른 사람은 정확하지만, Dispatcher가 뷰 모델에서 작동하지 않기 때문에, 여기가 그 방법은 다음과 같습니다 앱이 완전히로드 현재 프레임 전에 이동하려고하기 때문에

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

이 발생. Dispatcher는 좋은 솔루션 일 수 있지만 구문을 따라야합니다.

Windows.UI.Core;

private async void to_navigate() 
    { 
     await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => this.Frame.Navigate(typeof(MainPage))); 
    } 
  1. 원하는 페이지 이름으로 MainPage를 교체합니다.
  2. to_navigate() 함수를 호출하십시오.
관련 문제