2013-01-04 53 views
-1

現在我正在開發一個Windows手機應用程序,是的,這是我的第一個Windows應用程序。現在我面臨一個問題,不知道我犯了什麼愚蠢的錯誤。當然,我已經完成了調試。Windows手機7:面臨傳遞參數的問題

現在,我在做什麼?

  1. 從第1頁將數據傳遞到第2頁,
  2. 在頁面醒目內onNavigateTo數據()方法,是我正確地接收到它。
  3. 根據我得到的參數/數據(即ID),我正在進行Web服務調用。

問題: 如果我移動到從第2頁第3頁,並再次回到第2頁,它再次讓網絡通話。即在下面的代碼中再次呼叫DownloadStringAsync

ie如果第二頁是有5個數據的列表框,現在點擊特定的項目我將移動到第3頁,如果我回到第3頁的第2頁,項目得到加倍,即10項(只是因爲它打電話再次)

下面是參考可能的代碼:

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

有時這種方法(查詢字符串)產生問題。

在回事件它產生問題 其更佳存儲在isolatedstorage應用的ID(參數)鍵

IsolatedStorageSettings.ApplicationSettings [ 「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可以阻止(在這種情況下,UI線程)在某些情況下很長一段時間,要解決這一點,你可以使用network detection events

+0

感謝您提供寶貴建議的答案。現在,如果我包含isInitialized行然後它的顯示錯誤,當我把鼠標指針在那裏,它顯示2選項:**初始化屬性存根isInitialized和**初始化字段存根isInitialized **?哪一個是正確的? –

+0

您需要創建布爾型'this.isInitialized'字段(未在我的答案中顯示)。 –