ArgumentNullException при смене кадра

Поэтому я пытаюсь изменить кадры в приложении для Windows 8. Я пытался следовать учебнику на этой странице, но продолжаю получать ту же ошибку.

Я получаю ArgumentNullException на линии:

frameState[_pageKey] = pageState;

в классе LayoutAwarePage.cs, в методе OnNavigatedFrom.

Теперь я не уверен, почему я получаю эту ошибку, потому что я чувствую, что нет ничего, что могло бы вызвать это в моем коде. Моя кнопка onclick имеет следующий код:

DateTime chosenDateTime = new DateTime(year, month, day, hours, minutes, seconds);
this.Frame.Navigate(typeof(MainPage), chosenDateTime.ToString());

И метод OnNavigatedTo в моей главной странице выглядит так:

protected override void OnNavigatedTo(NavigationEventArgs e) {
   string parameter = (string)e.Parameter;
   if (parameter != "") {
       Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
       roamingSettings.Values["chosenDateTime"] = parameter;
       chosenDateTime = Convert.ToDateTime(e.Parameter);
   } else {
       Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
       if (roamingSettings.Values.ContainsKey("chosenDateTime")) {
           chosenDateTime = Convert.ToDateTime(roamingSettings.Values["chosenDateTime"].ToString());
       }
       if (roamingSettings.Values.ContainsKey("headline")) {
           chosenDateTextBlock.Text = roamingSettings.Values["headline"].ToString();
       }
   }
   SetTime();
}

Кто-нибудь может дать мне некоторую информацию о том, как я могу решить эту проблему?

Благодарю.

2 ответа

Решение

Хорошо, я нашел ответ на свой вопрос!

На обеих страницах, на которые я ссылаюсь, я должен был реализовать хотя бы минимальную реализацию двух методов:

protected override void OnNavigatedTo(NavigationEventArgs e) {
    base.OnNavigatedTo(e);
}

protected override void OnNavigatedFrom(NavigationEventArgs e) {
    base.OnNavigatedFrom(e);
}

И

base.OnNavigatedFrom(e);
base.OnNavigatedTo(e);

было очень важно иметь в методах.

Еще одна ситуация, которая может вызвать эту проблему, заключается в том, что страница больше не прикреплена ни к какому фрейму (например, она все еще находится в памяти из-за обработчиков событий или других ссылок, но ее фрейм уже удален со страницы).

Это очень легко сделать случайно, если вы позвоните Frame.Navigate() в обработчике события, который может быть запущен несколько раз или присоединен к событию несколько раз (первый вызов будет работать, но второй будет вызван после того, как на странице больше не будет фрейма).

Другие вопросы по тегам