如何知道网格上复选框的已选中/未选中状态?

时间:2012-05-08 16:55:57

标签: .net wpf datagrid checkbox datagridtemplatecolumn

我通过使用以下代码段以编程方式添加列来构建DataGrid

var check = new FrameworkElementFactory(typeof(CheckBox), "chkBxDetail");
dgDetalle.Columns.Add(new DataGridTemplateColumn() { CellTemplate = 
                      new DataTemplate() { VisualTree = check } });
for (int i = 0; i < 4; i++)
{
    DataGridTextColumn textColumn = new DataGridTextColumn();
    textColumn.Binding = new Binding(string.Format("[{0}]", i));
    dgDetalle.Columns.Add(textColumn);
}

如何知道网格上复选框的已检查/未确认状态?

更新不能使用绑定

1 个答案:

答案 0 :(得分:0)

最后我明白了......

我使用此代码段创建了DataGrid

var check = new FrameworkElementFactory(typeof(CheckBox));

dgDetalle.Columns.Add(new DataGridTemplateColumn()
    {
        CellTemplate = new DataTemplate() { VisualTree = check }
    });

for (int i = 0; i < 4; i++)
{
    DataGridTextColumn textColumn = new DataGridTextColumn();
    textColumn.Binding = new Binding(string.Format("[{0}]", i));
    dgDetalle.Columns.Add(textColumn);
}

然后,我制作了一个代码段来显示MessageBox中所选项目的数据:

string testValues = "";

for (int i = 0; i < dgDetalle.Items.Count; i++)
{
    DataGridRow row = (DataGridRow)dgDetalle.ItemContainerGenerator.ContainerFromIndex(i);
    FrameworkElement cellContent = dgDetalle.Columns[0].GetCellContent(row);
    CheckBox checkBox = VisualTreeHelper.GetChild(cellContent, 0) as CheckBox;
    if (checkBox != null && (checkBox.IsChecked ?? false))
    {
        List<string> item = (List<string>)dgDetalle.Items[i];
        foreach (var t in item)
        {
            testValues += t;
        }
    }
}

MessageBox.Show(testValues);

总结:

  1. 使用ItemContainerGenerator
  2. 获取行
  3. DataGrid获取特定列,并将其作为通用演示文稿对象(FrameworkElement
  4. 使用VisualTreeHelper获取内容。请注意,我在第一个代码段上创建了CheckBox
  5. 处理所选项目
  6. 希望它可以帮助任何人......!