我的应用程序收到一个需要在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次?
答案 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);
或者您也可以使用循环。 :)