2012-08-28 61 views
0

我有和3頁P1,P2和P3的應用程序。WP7導航參數

當應用程序從P2導航到P1時,它傳遞一個參數。

在P1上我得到的參數值,我顯示一個消息框。

這是可以正常使用,以下情形的問題是:

P2 - > P1,應用示出了使用後退按鈕消息,P1-> P3,P3-> P1和該應用再次顯示消息與來自P2的參數值,但它不應該顯示任何消息。

這是P1的代碼:

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     base.OnNavigatedTo(e); 
     String payment = ""; 
     if (NavigationContext.QueryString.TryGetValue("payment", out payment)) { 

      if (payment == "no") 
      { 
       MessageBox.Show("Your payment failed!.", 
       "Error", MessageBoxButton.OK); 
      } 
     } 
    } 

這是P2代碼:

NavigationService.Navigate(new Uri("/MainPage.xaml?payment=no", UriKind.Relative)); 

P3不傳遞任何參數

什麼是錯的,爲什麼應用程序顯示消息從P3導航到P1時?

任何幫助將不勝感激。

回答

2

你可以嘗試刪除從NavigationContext鍵/值對,你把它第一次後

if (NavigationContext.QueryString.TryGetValue("payment", out payment)) { 
    if (payment == "no") 
     { 
      MessageBox.Show("Your payment failed!.", 
      "Error", MessageBoxButton.OK); 
     } 
     NavigationContext.QueryString.Remove("payment"); 
    } 
1

覆蓋的OnNavigatedTo事件上的P1和檢查,如果後退按鈕使用這樣的:

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

    //if the page transition is occurred by pressing back button. 
    if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back) 
    { 
     //do or do not do something 
    } 
} 
0

試試這個,我希望它能起作用。

String _oldUrl; 
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
{ 
    String url = e.Uri.OriginalString; 
    if(url!=_oldUrl) 
    { 
      //do work here 

      _oldUrl = url; 
    } 
}