2014-12-22 3 views
0

어떤 페이지로 이동하기 전에 사용자가 로그인했는지 확인하려고합니다. 그렇지 않으면 로그인 페이지로 리디렉션됩니다. 프레임 요소 내부에서이 모든 작업을하고 있습니다.WPF. 스택 오버플로 탐색

사용자가 로그인하지 않으면 현재 코드가 무한 루프를 만듭니다.이 코드를 호출하고 이벤트 처리기에이 한 줄에 대해 .navigate를 무시하도록 지시하는 코드를 전달할 수 있습니까?

public MainWindow() { 
      InitializeComponent(); 
      FrameWindow.Navigating+=FrameWindow_Navigating; 
     } 

     private void FrameWindow_Navigating(object sender, NavigatingCancelEventArgs e) { 
      try { 
       if (UserLoggedIn()) { 
        //continue 
       } 
       else { 
        Uri uri = new Uri("Login.xaml", UriKind.Relative); 
        FrameWindow.NavigationService.Navigate(uri); 
       } 
      } 
      catch (Exception ex){ 
       throw ex; 
      } 
     } 

답변

0

수정 된 이유는 ... 어떤 규칙에도 위배되는 것이 확실하지 않은가요?

private void FrameWindow_Navigating(object sender, NavigatingCancelEventArgs e) { 
      try { 
       bool alreadyHeadingToHome = false; 

       if (e.ExtraData != null){ 
        alreadyHeadingToHome = (bool)e.ExtraData; 
       } 

       if (UserLoggedIn() || alreadyHeadingToHome) { 
       } 
       else { 
        Uri uri = new Uri("Login.xaml", UriKind.Relative); 
        FrameWindow.NavigationService.Navigate(uri, true); 
       } 
      } 
     catch (Exception ex){ 
      throw ex; 
     } 
    }