控件卡在无限循环中,因为WPF中Datagrid中的复选框事件
本文关键字:Datagrid 复选框 事件 WPF 无限循环 控件 因为 | 更新日期: 2023-09-27 18:06:17
我在WPF中有一个数据网格,第一列作为复选框。现在,我添加了一个选中所有复选框,该复选框出现在它所绑定的列的标题上。选择所有复选框和单个行复选框的处理程序定义为:
private void SelectAllCheckBox_Checked(object sender, RoutedEventArgs e)
{
foreach (BaseDataItem objItem in BaseReleaseList)
{
objItem.Select = true;
}
BaseReleaseDataGridView.Items.Refresh();
}
private void SelectAllCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
foreach (BaseDataItem objItem in BaseReleaseList)
{
objItem.Select = false;
}
BaseReleaseDataGridView.Items.Refresh();
}
private void RowCheckBoxUnchecked(object sender, RoutedEventArgs e)
{
SelectAllCheckBox.IsChecked = false;
}
private void RowCheckBoxChecked(object sender, RoutedEventArgs e)
{
if (AreAllCheckBoxesChecked())
SelectAllCheckBox.IsChecked = true;
else
SelectAllCheckBox.IsChecked = false;
BaseReleaseDataGridView.Items.Refresh();
}
private bool AreAllCheckBoxesChecked()
{
foreach (BaseDataItem objItem in BaseReleaseList)
{
if (!objItem.Select)
return false;
}
return true;
}
现在的问题是,每当我点击选择所有复选框或行复选框,控制被困在一个无限循环。原因是每当我将select设置为true或false时,它都会再次触发一个事件。如何处理?
不轻敲Checked
和UnChecked
两个事件,而是注册到Click
事件。Click事件将在用户单击复选框时引发,不像Checked/UnChecked即使在您以编程方式选中/取消选中复选框时也会被调用。
<CheckBox Name="SelectAllCheckBox" Click="SelectAll_OnClick"></CheckBox>
处理程序
private void SelectAll_OnClick(object sender, RoutedEventArgs e)
{
bool? isChecked = SelectAllCheckBox.IsChecked;
if (isChecked.HasValue)
{
foreach (BaseDataItem objItem in BaseReleaseList)
{
objItem.Select = isChecked;
}
BaseReleaseDataGridView.Items.Refresh();
}
}