【问题标题】:Adding DataGridCheckBoxColumn column to DataGrid programmatically以编程方式将 DataGridCheckBoxColumn 列添加到 DataGrid
【发布时间】:2016-06-17 11:17:01
【问题描述】:

我的项目中有一个 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});
  }

我在这里以编程方式注入复选框,到目前为止我已经在 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 网格中所做的任何帮助将不胜感激

【问题讨论】:

    标签: c# wpf checkbox datagrid


    【解决方案1】:

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

    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; }
    }    
    

    【讨论】:

    • @jayraja 如果您觉得我的回复对您有帮助,那么您可以接受我的回复作为答案,以简化以后的搜索。请参阅meta.stackexchange.com/questions/5234/…
    • @jayraja 随时提出任何问题
    猜你喜欢
    • 2010-10-16
    • 2015-12-29
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多