如何在 WPF DataGrid 中显示数组元素? [英] How can I display array elements in a WPF DataGrid?

查看:15
本文介绍了如何在 WPF DataGrid 中显示数组元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 WPF DataGrid 中显示一系列行,其中每行包含一个布尔数组(所有行的数量都相同,它不是锯齿状的二维数组),我想显示为单个列,例如.

I'm trying to display a series of rows in a WPF DataGrid where each row contains an array of booleans (the number of which is the same for all rows, it's not a jagged 2D array) that I want to display as individual columns, eg.

Name            | Day 1 | Day 2 | Day 3 | Day 4 | Day 5 | Day 6 |
-----------------------------------------------------------------
Bring out Trash |   X   |       |   X   |       |       |   X   |
Pay Bills       |       |       |       |       |   X   |       |
Commit Suicide  |       |       |       |       |       |   X   |

目前,我将这个类用于我的 DataGrid 行:

Currently, I'm using this class for my DataGrid rows:

private class GridRow {
  public string Name { get; set; }
  public char Day1 { get; set; }
  public char Day2 { get; set; }
  public char Day3 { get; set; }
  public char Day4 { get; set; }
  public char Day5 { get; set; }
  public char Day6 { get; set; }
  public char Day7 { get; set; }
  public char Day8 { get; set; }
  public char Day9 { get; set; }
}

在现实世界中,生成 128 个布尔值.它暂时完成了工作(只要没有人创建长度超过 128 天的循环计划),但这是一个相当丑陋的解决方案.

In the real world case, make that 128 booleans. It gets the job done for the time being (for as long as nobody creates cyclic plans with a length over 128 days) but it's a rather ugly solution.

我可以以某种方式将一组布尔值输入到 DataGrid 中吗?我查看了有关实现 ValueConverters 的各种文章,但我不确定这是否是我需要的.

Can I somehow feed an array of booleans into the DataGrid? I've taken a look various articles on implementing ValueConverters, but I'm not sure that's what I need.

推荐答案

我认为您必须为此处理背后的代码...

I think you'll have to deal with code behind for this...

示例:

测试类:

public class TestRow
{
    private bool[] _values = new bool[10];
    public bool[] Values
    {
        get { return _values; }
        set { _values = value; }
    }

    public TestRow(int seed)
    {
        Random random = new Random(seed);
        for (int i = 0; i < Values.Length; i++)
        {
            Values[i] = random.Next(0, 2) == 0 ? false : true;
        }
    }
}

如何生成测试数据&列:

How to generate test data & columns:

DataGrid grid = new DataGrid();
var data = new TestRow[] { new TestRow(1), new TestRow(2), new TestRow(3) };
grid.AutoGenerateColumns = false;
for (int i = 0; i < data[0].Values.Length; i++)
{
    var col = new DataGridCheckBoxColumn();
    //Here i bind to the various indices.
    var binding = new Binding("Values[" + i + "]");
    col.Binding = binding;
    grid.Columns.Add(col);
}
grid.ItemsSource = data;

看起来像什么(当然没有标题和所有内容)

What that looks like (lacks headers and everything of course)

为了使上面的代码更清晰,您应该使用 data[0].Values.Length 在创建数组时统一使用的 items-class 中公开一个静态属性 创建列时,如果数据集合为空,显然会抛出异常.

To make the above code cleaner you should expose a static property in your items-class which is used uniformly when creating the arrays, using data[0].Values.Length when creating the columns could obviously throw an exception if the data collection is empty.

这篇关于如何在 WPF DataGrid 中显示数组元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆