使用导航页面传递参数时的空引用[WP8.1]

时间:2014-06-24 20:30:45

标签: c# xaml navigation nullreferenceexception windows-phone-8.1

我不明白为什么或我做错了什么,但是当我的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

1 个答案:

答案 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.txtStationTitlestation会让我们很容易找到究竟是null的内容。