在wpf中创建两个ComboboxItems函数时,对象引用未设置为对象的实例

时间:2013-01-01 21:38:50

标签: wpf combobox nullreferenceexception

我在这里完全没有想法

问题是我使用两个组合框并且我想从两个组合框中获取值以在wpf中显示DataGrid中的内容。

我有这个函数从两个组合框中获取值。这很有效。

private void cboxYearChange(object sender, SelectionChangedEventArgs e)
    {
        ComboBoxItem typeItemYear = (ComboBoxItem)comboBox2.SelectedItem;
        string valueYear = typeItemYear.Content.ToString();

        ComboBoxItem typeItemMonth = (ComboBoxItem)comboBox1.SelectedItem;
        string valueMonth = typeItemMonth.Content.ToString();
}

但后来我想创建另一个函数来检查其他组合框的变化:

private void cboxMonthChange(object sender, SelectionChangedEventArgs e)
    {
        ComboBoxItem typeItemYear = (ComboBoxItem)comboBox2.SelectedItem;
        string valueYear = typeItemYear.Content.ToString();

        ComboBoxItem typeItemMonth = (ComboBoxItem)comboBox1.SelectedItem;
        string valueMonth = typeItemMonth.Content.ToString();

} 

我可以构建,但是当我运行它时,我得到的Object引用没有设置为ComboBoxItem上的对象错误实例typeItemYear =(ComboBoxItem)comboBox2.SelectedItem; cboxMonthChange函数中的行

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

在选择某些内容之前,SelectedItem为null。除非它们同时更改(这是不可能的,因为这些事件按顺序触发),comboBox1.SelectedItem或comboBox2.SelectedItem上的类型转换将抛出异常。

检查SelectedItem是否设置了方法。 或者使用另一个演员,比如:

ComboBoxItem item1 = comboBox1.SelectedItem as ComboBoxItem; if(item1!= null) {   // 做一点事 }

希望这会有所帮助: - )

答案 1 :(得分:0)

1)尽可能不应在代码中引用控件的名称 例如,您可以知道在SelectionChanged中更改了哪个ComboBox 将Sender强制转换为ComboBox的处理程序 2)但在这种简单的情况下,只需使用公共属性并将它们绑定到 你的ComboBox:一切都将完成,没有代码。

<ComboBox x:Name="YearSelectCB" SelectedItem="{Binding SelectedYear}">
<ComboBox x:Name="MonthSelectCB" SelectedItem="{Binding SelectedMonth}">

(您可以通过多种方式设置窗口的DataContext,例如在 窗口加载的事件处理程序(DataContext = this))