c# - 以编程方式将 DataGridCheckBoxColumn 列添加到 DataGrid

标签 c# wpf checkbox datagrid

我在我的项目中有一个 xaml 网格,我在其中使用复选框我们的要求已更改现在我们正在以编程方式构建数据网格我如何在 csharp 中使用 xaml。以下是我在 xaml 中有复选框列的示例

<DataGridTemplateColumn>
    <DataGridTemplateColumn.Header>
       <CheckBox x:Name="chkHeader" />
            </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                   <DataTemplate>
                            <CheckBox IsChecked="{Binding IsChecked,   
                           ElementName=chkHeader, Mode=OneWay,
                           UpdateSourceTrigger=PropertyChanged}"  />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

这里我以编程方式创建了一个网格

foreach (var field in dc.AllColumns)
 {
     var binding = new Binding(".") { Converter = new  
        IndexingDataFieldsConverter(field) };
        AudioPlayBackGrid.Columns.Add(new DataGridTextColumn { Header = 
          field.Field.Description, Binding = binding});
  }

在这里我以编程方式注入(inject)复选框,到目前为止我已经在 xaml 中完成了

    Binding columnbinding = new Binding("IsChecked");
    columnbinding.Mode = BindingMode.OneWay;
    columnbinding.RelativeSource = new RelativeSource
    (RelativeSourceMode.FindAncestor);
    columnbinding.RelativeSource.AncestorType = datagrid.GetType();

    CheckBox chkHeader = new CheckBox();
    chkHeader.Content = "ALL";
    chkHeader.SetBinding(CheckBox.IsCheckedProperty, columnbinding);
    DataGridCheckBoxColumn checkBoxColumn = new   
    DataGridCheckBoxColumn();
    checkBoxColumn.Header = chkHeader;
    checkBoxColumn.Binding = columnbinding;
    AudioPlayBackGrid.Columns.Add(checkBoxColumn);

我无法在 csharp 中执行我在 xaml 网格中执行的操作,我们将不胜感激

最佳答案

您可以尝试这种以编程方式添加列的方法:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    DataGridTextColumn dgTextColumn = new DataGridTextColumn();
    dgTextColumn.Header = "ID";
    dgTextColumn.Binding = new Binding("ID");
    dataGrid1.Columns.Add(dgTextColumn);

    DataGridCheckBoxColumn dgCheckBoxColumn = new DataGridCheckBoxColumn();
    dgCheckBoxColumn.Header = "IsChecked";
    dgCheckBoxColumn.Binding = new Binding("IsChecked");
    dataGrid1.Columns.Add(dgCheckBoxColumn);

    DataGridTextColumn dgTextColumn2 = new DataGridTextColumn();
    dgTextColumn2.Header = "Name";
    dgTextColumn2.Binding = new Binding("Name");
    dataGrid1.Columns.Add(dgTextColumn2);

    dataGrid1.Items.Add(new Item() { ID = 1, Name = "Someone1", IsChecked = true });
    dataGrid1.Items.Add(new Item() { ID = 2, Name = "Someone2", IsChecked = false });
    dataGrid1.Items.Add(new Item() { ID = 3, Name = "Someone3", IsChecked = true });
    dataGrid1.Items.Add(new Item() { ID = 4, Name = "Someone4", IsChecked = false });
}

和模型:

public class Item
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool IsChecked { get; set; }
}    

关于c# - 以编程方式将 DataGridCheckBoxColumn 列添加到 DataGrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783885/

相关文章:

javascript - 如何从 cshtml 页面导航到网络表单?

c# - WPF:无法在属性元素怪异上设置属性

c# - 如何使用其他集合替换集合中的一系列项目?

c# - Json 反序列化器将对象读取到数组

c# - wpf c# 有没有强制列表框换行

.net - 在WPF中,x :Name and Name attributes?有什么区别

vb.net - 我如何检查vb.net中的datagridview列中的复选框是否被选中

javascript - 根据条件使用 ng-repeat 动态显示输入复选框

javascript - 如何使用 jquery/javascript 获取特定选项的复选框值?

c# - 如何在 C# 中取消扁平化的 json