我有一个激活此ComboBox cmbGroup
的CheckBox chkAddToGroup
。如果正在检查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
连接到groupColl
(DisplayMemberPath
在外部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
以清除组合框。(不知道其他方式自动取款机)
如果用户在点击重置按钮之前没有选中复选框,则不会发生任何特殊情况。但是,如果用户确实选中了复选框并选择了一个项目,则只要应用程序尝试执行cmbGroup.ItemsSource = null;
就会出现NullReferenceException
为什么会这样?知道吗?
我不能向你保证这适用于 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;
你可以试试
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