【问题标题】:Problem with checkbox Ischecked in a click event在单击事件中选中复选框的问题
【发布时间】: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 the DataGrid's ItemCollection directly
  • 编辑您现有的问题并将更新后的代码粘贴到此处并保存。不要在现有问题的评论中发布代码。

标签: c# wpf checkbox


【解决方案1】:

好的,我的代码取得了进展,这里是新的:

        private void Chk_UID_IsSelected_Click(object sender, RoutedEventArgs e)
    {

        foreach (DataRowView dr in dgConnected_Users.ItemsSource)
        {
            var Chkbox = sender as CheckBox;

            if (Chkbox.IsChecked == true)
            {
                isAnyChecked++;
            }
            else
            {
                isAnyChecked--;
            }
        }

        if (isAnyChecked > 0)
        {
            UID_Disconnect.IsEnabled = true;
        }
        else
        {
            UID_Disconnect.IsEnabled = false;
        }
    }

工作人员会这样做,但我知道如果我只选中一个复选框,'isAnyChecked' = 2,或者它必须等于 1。

【讨论】:

    猜你喜欢
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-07-20
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    相关资源
    最近更新 更多