C# 为什么NavigationService.Navigate仅在末尾运行?

C# 为什么NavigationService.Navigate仅在末尾运行?,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,如您所见,我想导航到ScoreInputDialog.xaml页面,用户可以在其中键入名称。在此之后,我尝试将名称保存到列表中,但它始终为空,因为页面ScoreInputDialog.xaml的导航终于完成了。在继续代码的其余部分之前,如何导航到所需页面并获取值 NavigationService.Navigate(new Uri("/ScoreInputDialog.xaml", UriKind.Relative)); // Sets tempPlayerName through a text

如您所见,我想导航到ScoreInputDialog.xaml页面,用户可以在其中键入名称。在此之后,我尝试将名称保存到列表中,但它始终为空,因为页面ScoreInputDialog.xaml的导航终于完成了。在继续代码的其余部分之前,如何导航到所需页面并获取值

NavigationService.Navigate(new Uri("/ScoreInputDialog.xaml", UriKind.Relative)); // Sets tempPlayerName through a textbox.
if (phoneAppService.State.ContainsKey("tmpPlayerName"))
{
    object pName;
    if (phoneAppService.State.TryGetValue("tmpPlayerName", out pName))
    {
        tempPlayerName = (string)pName;
    }
}
highScorePlayerList.Add(tempPlayerName);
导航不是最后执行的,它只是异步执行的。您必须等待导航完成

导航不是最后执行的,它只是异步执行的。您必须等待导航完成


在导航调用之后,不应直接执行任何操作。相反,请覆盖来自页面的OnNavigatedTo方法,以便在用户返回时收到通知:

当用户退出ScoreInputDialog.xaml时,可能通过按后退按钮或调用NavigationService.GoBack来调用此方法。这将退出ScoreInputDialog.xaml页面并转到上一页面,在该页面中将调用OnNavigatedTo。这是检查值的时间

导航流程图:

原始页面--[Navigate]-->ScoreInputDialog--[GoBack或Back按钮]-->原始页面*

在*所在的位置,将调用OnNavigatedTo。实现可以如下所示:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    if (phoneAppService.State.ContainsKey("tmpPlayerName"))
    {
        object pName;
        if (phoneAppService.State.TryGetValue("tmpPlayerName", out pName))
        {
            tempPlayerName = (string)pName;
        }
        highScorePlayerList.Add(tempPlayerName);
    }
}
在调用Navigate之前,请记住清除临时播放机名称:


注意:当用户第一次看到该页面或从ScoreInputDialog.xaml以外的其他页面返回时,也将调用OnNavigatedTo。但是tmpPlayerName值将不会被设置。

在导航调用之后,您不应该直接执行任何操作。相反,请覆盖来自页面的OnNavigatedTo方法,以便在用户返回时收到通知:

当用户退出ScoreInputDialog.xaml时,可能通过按后退按钮或调用NavigationService.GoBack来调用此方法。这将退出ScoreInputDialog.xaml页面并转到上一页面,在该页面中将调用OnNavigatedTo。这是检查值的时间

导航流程图:

原始页面--[Navigate]-->ScoreInputDialog--[GoBack或Back按钮]-->原始页面*

在*所在的位置,将调用OnNavigatedTo。实现可以如下所示:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    if (phoneAppService.State.ContainsKey("tmpPlayerName"))
    {
        object pName;
        if (phoneAppService.State.TryGetValue("tmpPlayerName", out pName))
        {
            tempPlayerName = (string)pName;
        }
        highScorePlayerList.Add(tempPlayerName);
    }
}
在调用Navigate之前,请记住清除临时播放机名称:


注意:当用户第一次看到该页面或从ScoreInputDialog.xaml以外的其他页面返回时,也将调用OnNavigatedTo。但随后将不会设置tmpPlayerName值。

请阅读以下页面:

在备注部分中的方法和属性定义之后的底部,它解释了NavigationService类的工作原理,这个漂亮的小图解释了很多内容:


阅读以下页面:

在备注部分中的方法和属性定义之后的底部,它解释了NavigationService类的工作原理,这个漂亮的小图解释了很多内容:


我已尝试使用NavigationService.Navigated,但仍无法按预期工作。你能举例说明如何使用它吗?NavigationService.Navigated方法中应该包含哪些内容?我已经尝试使用NavigationService.Navigated,但它仍然无法按预期工作。你能举例说明如何使用它吗?导航服务中应该包含什么?导航方法?谢谢您的示例和解释。它解决了我的问题。谢谢你的例子和解释。它解决了我的问题。
phoneAppService.State.Remove("tmpPlayerName");
NavigationService.Navigate(new Uri("/ScoreInputDialog.xaml", UriKind.Relative));