我不明白为什么或我做错了什么,但是当我的Windows Phone 8.1应用程序中执行以下代码时,我得到一个空引用异常:
首先,应用程序导航并将selectedStation传递到下一页......
MainPage中的代码:
// 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.Text更改为station.StationName时,会发生错误。
如果我取出更改文本框的代码,并逐步执行该程序,则表明在OnNavigatedTo方法结束时,工作站变量实际上不为空...
非常感谢任何帮助!
-Johan
答案 0 :(得分:2)
似乎不是电台是空的,而是this.txtStationTitle
。
您正在OnNavigatedTo
中执行所有操作,而包含您尝试更改的TextBlock的页面(XAML)未完全加载,因此TextBlock为null并且当您尝试执行this.txtStationTitle.Text
时,你得到一个NullReferenceException。
但是,如果您在页面的AddInformation
事件处理程序中调用Loaded
,那么您将确保该页面已完全加载且TextBlock不再为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
会让我们很容易找到究竟是null的内容。