0

私は3ページのP1、P2、P3のアプリを持っています。

アプリが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に移動するときにアプリがメッセージを表示するのはなぜですか?

どんな助けでも大歓迎です。

4

3 に答える 3

2

初めて取得した後、NavigationContextからキーと値のペアを削除してみることができます

if (NavigationContext.QueryString.TryGetValue("payment", out payment)) {
    if (payment == "no")
        {
            MessageBox.Show("Your payment failed!.",
           "Error", MessageBoxButton.OK);
        }
        NavigationContext.QueryString.Remove("payment");
     }
于 2012-08-28T12:35:25.273 に答える
1

Override the OnNavigatedTo event on your P1 and check if the back button was used like this:

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  
    }  
} 
于 2012-08-28T12:27:29.970 に答える
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;
     }
}
于 2012-08-28T12:55:51.557 に答える