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()
в обработчике события, который может быть запущен несколько раз или присоединен к событию несколько раз (первый вызов будет работать, но второй будет вызван после того, как на странице больше не будет фрейма).