我在这里完全没有想法
问题是我使用两个组合框并且我想从两个组合框中获取值以在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函数中的行
我在这里缺少什么?
答案 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))