我有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时,应用程序显示消息的原因是什么?
非常感谢任何帮助。
答案 0 :(得分: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 :(得分:1)
覆盖P1上的OnNavigatedTo
事件并检查后退按钮是否使用如下:
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
}
}
答案 2 :(得分: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;
}
}