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 回答