gpt4 book ai didi

.net - 如何在 WPF DataGrid 中显示数组元素?

转载 作者:行者123 更新时间:2023-12-04 02:08:32 31 4
gpt4 key购买 nike

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

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 行:
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 个 bool 值。它暂时完成了工作(只要没有人创建长度超过 128 天的循环计划),但这是一个相当丑陋的解决方案。

我可以以某种方式将一组 bool 值输入到 DataGrid 中吗?我已经查看了关于实现 ValueConverters 的各种文章,但我不确定那是我需要的。

最佳答案

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

示例:

测试类:

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

如何生成测试数据和列:
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;

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

A screenshot of a grid with checkboxes...

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

关于.net - 如何在 WPF DataGrid 中显示数组元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5582226/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com