设置ItemSource ComboBox属性时出现NullReferenceException

时间:2012-07-16 19:39:28

标签: c# wpf combobox nullreferenceexception itemssource

  

可能重复:
  What is a NullReferenceException in .NET?

我有两个ComboBox,一个公司和其他地区(意味着每个公司都有一个o区域),我想根据ComboBox_Company中设置的公司更改ComboBox_Region的ItemSource。

我有两个类,代表公司和地区,以及一个区域类的方法,它返回已确定公司的区域列表(作为参数传递)。

当ComboBox_Company选中的项目被更改时,我还有一个事件需要重新加载ComboBox_Region源。见下文

private void ComboBox_Company_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   Company selected_company= (Company)ComboBox_Company.SelectedValue;
   Dictionary<int, string> regions = Region.GetLookupListByCompanyID(null, selected_company.ID, false);
   ComboBox_Region.ItemsSource = regions.Values;
}

尽管如此,我收到了NullReferenceException错误,而且我不知道如何解决它。

这里是XAML代码:

<TextBlock Grid.Row="0" Grid.Column="0" Text="{x:Static props:ResourcesWPF.Company}" />
<ComboBox Name="ComboBox_Company" Grid.Row="0" Grid.Column="1" DisplayMemberPath="Name" SelectedItem="ID" Initialized="ComboBox_Company_Initialized"  SelectionChanged="ComboBox_Company_SelectionChanged" />

<TextBlock Grid.Row="1" Grid.Column="0" Text="{x:Static props:ResourcesWPF.Region}" />
<ComboBox Name="ComboBox_Region" Grid.Row="1" Grid.Column="1" DisplayMemberPath="Name" SelectedItem="ID" Initialized="ComboBox_Region_Initialized" SelectionChanged="ComboBox_Region_SelectionChanged" />

2 个答案:

答案 0 :(得分:4)

以下变量之一为null

ComboBox_Company
Region
selected_company
selected_company.ID
ComboBox_Region
regions

并且您传递给它的方法可能不期望null符号。

您可以使用调试器并查看。抛出异常时,调试器通常会自动启动。在屏幕的底部,有2个小标签。 localswatch。您可以使用它们来查看变量中的值,并查看其中一个是否为空。

答案 1 :(得分:1)

你得到了那个例外,因为它是真的......你正在访问一些NULL。很有可能,它是selected_company.ID。

以下是您的问题的一些帮助:

每次您的ComboBox的SelectedValue发生变化时,您的事件都会多次触发。这包括SelectedValue从旧值变为[empty]的时间(在它变为新值之前)。解决此问题的一种方法是检查逻辑是否仅在设置新值时运行。围绕if:

包装你的逻辑
if (e.AddedItems.Count > 0)
{
    //your logic
}

虽然,实现所谓的更好的方法是不使用 SelectionChanged 事件监听器,而是利用WPF的{Binding}引擎。将第二个ComboBox的ItemsSource绑定到第一个ComboBox的SelectedItem的属性。