1

我有一个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以清除组合框。(不知道任何其他方式atm)

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

为什么会这样?任何想法?

4

2 回答 2

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;
于 2012-09-16T20:14:48.553 回答
0

你可以试试

cmbGroup.Items.Clear();

链接:http: //msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.items.aspx

链接:http: //msdn.microsoft.com/en-us/library/system.windows.controls.itemcollection.clear.aspx

于 2012-09-16T20:17:56.147 回答