如何有效地将数组添加为WPF DataGrid行?

时间:2019-02-02 14:53:28

标签: c# arrays wpf string datagrid

我的应用程序收到一个需要在WPF DataGrid中显示的16字节数组(实际上是表示字节的字符串数组):每列一个字节,每行16个字节。我想创建列并将字节数组添加到新行,而不必在每个新记录中重复执行16次代码。

我当前(和重复的)方法如下:

创建16列:

for (int i = 0; i < 16; i++)
{
    HexadecimalGrid.Columns.Add(new DataGridTextColumn
    {
        Binding = new Binding("b" + i.ToString()),
    });
}

收到的数组:

string[] theData = new string[16] { "1A", "2C", "05", "11", "D2" ... "F9" };

向DataGrid添加新行:

HexadecimalGrid.Items.Add(new {b0 = theData[0], b1 = theData[1] ... b15 = theData[15]});

那么,有没有更好的方法呢?而不是输入bx = theData[x] 16次?

1 个答案:

答案 0 :(得分:0)

我同意,有更好的方法可以做到这一点,但要回答您的问题:您可以使用LINQ使用聚合来构建ExpandoObject来做到这一点:

var newItem = Enumerable.Range(0, theData.Length)
    .Aggregate<int, ICollection<KeyValuePair<string, object>>, ICollection<KeyValuePair<string, object>>>(
        new ExpandoObject(),
        (collection, index) =>
        {
            collection.Add(new KeyValuePair<string, object>($"b{index}", theData[index]));
            return collection;
        },
        collection => collection);

更新:实际上,如果使用其IDictionary接口,它会更具可读性:

var newItem = Enumerable.Range(0, theData.Length)
    .Aggregate<int, IDictionary<string, object>, IDictionary<string, object>>(
        new ExpandoObject(),
        (dict, index) =>
        {
            dict.Add($"b{index}", theData[index]);
            return dict;
        },
        dict => dict);

或者您也可以使用循环。 :)