如何在 WPF c# 的 Datagrid 中添加复选框

9

您好,我想在数据网格视图中添加复选框。我已经编写了测试代码,但失败了。我的目标是在添加到数据网格中的项中添加一个带有全选和取消全选选项的复选框。

我不知道该怎么做,所以需要一些帮助。我很困惑的一件事是,如果我们动态添加复选框,如何跟踪哪个复选框被选中或未选中。

这是我目前的代码:

    public partial class MainWindow : Window
    {
        List<checkedBoxIte> item = new List<checkedBoxIte>();
        public MainWindow()
        {
            InitializeComponent();
            for (int i = 0; i < 5; i++)
            {
                checkedBoxIte ite = new checkedBoxIte();
                ite.sr = i.ToString();
                ite.ch = new CheckBox();
                item.Add(ite);
            }
            dataGrid1.ItemsSource = item
        }
    }
    public class checkedBoxIte
    {
       public string sr {get;set;}
       public CheckBox ch { get; set; }
    }

我知道这样添加复选框是最愚蠢的事情,但这只是一个尝试。 上述类包含两个属性,后面会有更多,但都将是字符串。

1个回答

23

WPF不知道如何处理你的checkedBoxIte项。我建议你按以下方式更改你的类:

public class checkedBoxIte
{
   public string MyString {get;set;}
   public bool MyBool { get; set; }
}

然后以这种方式设置您的DataGrid的列:

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="MyString" Binding="{Binding MyString}" />
        <DataGridCheckBoxColumn Header="MyBool" Binding="{Binding MyBool}" />
    </DataGrid.Columns>
</DataGrid>

现在您可以设置ItemsSource

for (int i = 0; i < 5; i++)
{
    checkedBoxIte ite = new checkedBoxIte();
    ite.MyString = i.ToString();
    item.Add(ite);
}
dataGrid1.ItemsSource = item;

它的运行完全正常,但我有一些问题,比如首先出现了4列,意味着重复2。我们如何触发事件或检查这是哪个复选框? - Afnan Bashir
嗯,我不认为有四列是正常的。您确定已将“AutoGenerateColumns”设置为“False”吗? - as-cii
它是真的。现在正在工作。对于第二部分,我该如何检测选中的行? - Afnan Bashir
将处理程序附加到 DataGridCellEditEnding,然后从 EventArgsRow 属性中提取行。或者您可以在类上实现 INotifyPropertyChanged,然后直接从那里查看何时选中了 CheckBox - as-cii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接