使用附加的ItemsSource清除ComboBox? - > ItemsSource = null - >的NullReferenceException

时间:2012-09-16 19:51:39

标签: c# wpf event-handling

我有CheckBox chkAddToGroup激活此ComboBox cmbGroup。 如果正在检查chkAddToGroup,则会发生以下情况:

ObservableCollection<Group> groupColl = new ObservableCollection<Group>() { };
foreach (Group g in GroupHandler.GroupList)
{
    groupColl.Add(g);
}
cmbGroup.ItemsSource = groupColl;
cmbOrganisation.SelectedIndex = 0;
cmbGroup.IsEnabled = true;

正如您所看到cmbGroup已附加到groupCollDisplayMemberPath已设置在外部Style中)。

如果我尝试重置表单,则会出现问题。因此我有一个Button btnReset。 如果用户点击btnReset,则应用程序执行此操作:

chkAddToGroup_Unchecked(this, null);

chkAddToGroup_Unchecked(object sender, RoutedEventArgs e)以下发生:

private void chkAddToGroup_Unchecked(object sender, RoutedEventArgs e)
    {
        cmbGroup.ItemsSource = null;
        cmbGroup.IsEnabled = false;
        cmbGroupRole.ItemsSource = null;
        cmbGroupRole.IsEnabled = false;
    }

如您所见,我设置了ItemsSource = null以清除组合框。 (不知道其他任何方式)

如果用户在点击重置按钮之前未选中该复选框,则不会发生任何特殊情况。 但是,如果用户确实选中了复选框并选择了一个项目,那么只要应用程序尝试执行NullReferenceException就会有cmbGroup.ItemsSource = null;

为什么会这样?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我无法向你保证这适用于WPF,但你可以尝试一下。我看着WPF已经很久了。

cmbGroup.Items.Clear();

for(int i=0; i<cmbGroup.Items.Count; i++)
{
   cmbGroup.RemoveAt(i);
}

或使用空列表

ObservableCollection<Group> emptyList = new ObservableCollection<Group>();
cmbGroup.ItemsSource = emptyList;

答案 1 :(得分:0)