【发布时间】:2021-08-08 01:25:54
【问题描述】:
我的复选框有问题。我正在解释。
我的 Datagrid 可以有多行,所以有多个复选框。
当一个或多个复选框为真时,一个按钮IsEnable=true。但如果没有复选框为真,则按钮被禁用。
复选框 IsChecked 的计数可能有问题?还是点击过程不合适?
这是我的代码:
private void Chk_UID_IsSelected_Click(object sender, RoutedEventArgs e)
{
var Chkbox = sender as CheckBox;
if (Chkbox.IsChecked == true)
{
UID_Disconnect.IsEnabled = true;
}
else
{
UID_Disconnect.IsEnabled = false;
}
}
但我的代码实际上只检查了一个复选框。如果我点击 2 个复选框并取消选中一个,我的按钮状态不正确。
我的设计:
再试一次,没有结果:
private void Chk_UID_IsSelected_Click(object sender, RoutedEventArgs e)
{
foreach (CheckBox c in dgConnected_Users.ItemsSource)
{
var Chkbox = sender as CheckBox;
UID_Disconnect.IsEnabled = Chkbox.IsChecked == true;
}
}
这里再试一次,没有结果:
private void Chk_UID_IsSelected_Click(object sender, RoutedEventArgs e)
{
int checkedBoxes = dgConnected_Users.Items
.OfType<CheckBox>().Count(c => (bool)c.IsChecked == true);
if (checkedBoxes > 0)
{
// You shall pass!
UID_Disconnect.IsEnabled = true;
}
else
{
// None shall pass
UID_Disconnect.IsEnabled = false;
}
}
【问题讨论】:
-
因为您只检查最后一次单击复选框的状态。您将需要遍历数据网格中的所有复选框。
-
每次单击
CheckBox时,您都将根据当前CheckBox的值设置按钮的IsEnabled属性。在将IsEnabled属性设置为false之前,您需要检查是否还选中了任何其他复选框。 -
这是我的问题,我找不到循环遍历所有复选框的方法。
-
您应该iterate the data source 检查是否检查了其他
CheckBoxes。如果CheckBoxes 没有绑定到你的数据源,你可以iterate theDataGrid'sItemCollectiondirectly。 -
编辑您现有的问题并将更新后的代码粘贴到此处并保存。不要在现有问题的评论中发布代码。