#c# #xaml #navigation #nullreferenceexception #windows-phone-8.1
#c# #xaml #навигация #Исключение nullreferenceexception #windows-phone-8.1
Вопрос:
Я не понимаю, почему или что я делаю неправильно, но я получаю исключение с нулевой ссылкой, когда следующий код выполняется в моем приложении Windows Phone 8.1:
Сначала приложение выполняет навигацию и передает выбранную станцию на следующую страницу…
Код с главной страницы:
// When an item is selected, go to the next page and pass info
private void listBoxStations_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// Get the selected station item
CompleteStation selectedStation = (CompleteStation)this.listBoxStations.SelectedItem;
this.Frame.Navigate(typeof(StationInformationPage), selectedStation);
// Make sure we set the selected index to -1 after item is selected so
// when we come back to page, no items are selected
this.listBoxStations.SelectedIndex = -1;
}
Вот код, который выдает ошибку null на следующей странице:
private CompleteStation station;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
this.navigationHelper.OnNavigatedTo(e);
this.station = (CompleteStation)e.Parameter;
AddInformation();
}
private void AddInformation()
{
this.txtStationTitle.Text = station.StationName;
// Add more information here
}
Ошибка, в частности, возникает, когда я пытаюсь изменить txtStationTile .Текст на станцию.StationName .
Если я удалю код, который изменяет текстовое поле, и пройдусь по программе, это покажет, что переменная station на самом деле не равна нулю к концу метода OnNavigatedTo …
Любая помощь будет с благодарностью!
-Йохан
Ответ №1:
Кажется, что это не станция, которая имеет значение null, а this.txtStationTitle
.
Вы делаете все, OnNavigatedTo
пока страница (XAML), включая текстовый блок, который вы пытаетесь изменить, загружена не полностью, поэтому текстовый блок имеет значение null, и когда вы пытаетесь это сделать this.txtStationTitle.Text
, вы получаете исключение NullReferenceException .
Однако, если вы вызовете AddInformation
Loaded
обработчик событий страницы, вы будете уверены, что страница полностью загружена, и текстовый блок больше не будет иметь значения null.
public SomePage()
{
this.InitializeComponent();
this.Loaded = SomePage_Loaded;
}
void SomePage_Loaded(object sender, RoutedEventArgs e)
{
AddInformation();
}
Этот тип исключений обычно очень легко отлаживается. Установка точки останова в следующей строке:
this.txtStationTitle.Text = station.StationName;
и изучение this.txtStationTitle
и station
сделало бы очень простым выяснить, что именно равно нулю.