Вы ничего не должны делать непосредственно после вызова Navigate
.Вместо этого переопределите метод OnNavigatedTo
страницы, с которой вы заходите, чтобы получать уведомления, когда пользователь возвращается :
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
Этот метод будет вызываться при выходе пользователя из "ScoreInputDialog.xaml ", вероятно, нажав кнопку назад или потому что вы звоните NavigationService.GoBack()
.Это выходит из страницы «ScoreInputDialog.xaml» и переходит на предыдущую страницу, где будет вызываться OnNavigatedTo
.Это время, чтобы проверить значение.
Иллюстрация потока навигации:
«OriginPage» --- [Navigate
] ---> «ScoreInputDialog» --- [GoBack()
или кнопка «Назад»] --> «OriginPage» (*)
Там, где (*), будет вызываться 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
:
phoneAppService.State.Remove("tmpPlayerName");
NavigationService.Navigate(new Uri("/ScoreInputDialog.xaml", UriKind.Relative));
Примечание: OnNavigatedTo
также будет вызываться, когда пользовательвидит страницу в первый раз или переходит с других страниц, кроме "ScoreInputDialog.xaml".Но тогда значение "tmpPlayerName" не будет установлено.