2013-01-04 2 views
-1

지금 Windows Phone 앱을 개발하고 있습니다. 예.이 프로그램은 첫 번째 Windows 앱입니다. 지금 나는 문제에 직면하고있다. 어리석은 실수가 뭔지 모르겠다. 네 물론 디버깅을 완료했습니다.Windows phone 7 : 매개 변수 전달에 대한 문제가 발생했습니다.

이제 정확히 무엇을하고 있습니까? onNavigateTo 내부 데이터를 잡기 2 페이지를 1 페이지에서 데이터를 전달

  1. 페이지에
  2. 은() 메소드, 그래 내가 제대로 수신하고 있습니다.
  3. 매개 변수/데이터 (ID)에 따라 웹 서비스 호출을하고 있습니다.

문제 : 내가 2page에서 3 페이지로 이동하고 다시는 다시 웹 호출을 다시 2 페이지에 제공된 경우. 즉 아래 코드에서 DownloadStringAsync으로 다시 전화하십시오.

예 : 두 번째 페이지에 5 개의 데이터가있는 ListBox가있는 경우 특정 항목을 클릭하면 3 번째 페이지로 이동하고, 3 번째 페이지에서 2 번째 페이지로 돌아 가면 항목이 두 배로 증가합니다.

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
     base.OnNavigatedTo(e); 

     type = Convert.ToInt32(NavigationContext.QueryString["Type"]); 
     if (type != 0) 
     { 
      if (NetworkInterface.GetIsNetworkAvailable()) 
      { 
       client.DownloadStringAsync(new Uri(Utils.Constant.WebService_URL)); 
      } 
      else 
      { 
        MessageBox.Show("Please check internet connection!!"); 
      } 
     } 
} 

답변

5

사용자가 뒤로 단추를 사용했는지 테스트하기 위해 다음 코드를 사용할 수 없습니까?

e.NavigationMode == System.Windows.Navigation.NavigationMode.Back 
+0

그건 정확한 펀치라고 :) 도와 줘서 고마워. –

0

때때로이 방법 (QueryString을) 문제를 야기 : 다시)

여기에 참조 가능한 코드이다. 이

IsolatedStorageSettings.ApplicationSettings [ "ID"] = "데이터"키 isolatedstorage 애플리케이션의 ID (파라미터)를 저장하기 위해 그 낫다고 문제를 다시 생성 이벤트에서

;

+0

답장을 보내 주셔서 감사합니다. 그러나 문제의 원인은 무엇입니까? –

0

OnNavigatedTo은 앞으로 탐색 또는 뒤로 탐색 중 하나를 사용하여 페이지를 탐색 할 때마다 호출됩니다. 그래서 # 3 페이지에서 # 2 페이지로 돌아갈 때 다시 트리거됩니다.

앞으로 탐색에서 네트워크 호출 만 트리거하면이 문제를 방지 할 수 있습니다.

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    base.OnNavigatedTo(e); 

    if (this.isInitialized) return; 

    type = Convert.ToInt32(NavigationContext.QueryString["Type"]); 
    if (type != 0) 
    { 
     if (NetworkInterface.GetIsNetworkAvailable()) 
     { 
      client.DownloadStringAsync(new Uri(Utils.Constant.WebService_URL)); 
     } 
     else 
     { 
       MessageBox.Show("Please check internet connection!!"); 
     } 
    } 
    this.isInitialized = true; 
} 

NetworkInterface.GetIsNetworkAvailable 당신이 network detection events을 사용할 수있는이 문제를 해결하기 위해 일부 시나리오에서 오랜 시간 동안 (이 경우 UI 스레드) 차단할 수 있습니다 조심하십시오.

+0

귀중한 제안을 주신 답변에 감사드립니다. 이제 내가 isInitialized 행을 표시 오류를 표시, 거기에 마우스 포인터를 넣어 때, 그 2 옵션을 보여줍니다 : ** isInitialized에 대한 ** 초기화 된 속성 스텁 및 ** 초기화 된 필드 스텁 isInitialized **? 어느 것이 올바른 것인가? –

+0

부울'this.isInitialized' 필드를 만들어야합니다 (내 대답에는 표시되지 않음). –