我需要将对象列表表示为矩阵。矩阵的大小始终为16x16。
该对象仅包含3个字段:
library(tidyverse)
expand.grid(a, b) %>%
rowwise() %>%
mutate(res = list(ff(X, Var1, Var2))) %>%
ungroup() %>%
spread(Var1, res)
## A tibble: 4 x 4
# Var2 `1` `2` `3`
# <dbl> <list> <list> <list>
#1 4. <list [2]> <list [2]> <list [2]>
#2 5. <list [2]> <list [2]> <list [2]>
#3 6. <list [2]> <list [2]> <list [2]>
#4 7. <list [2]> <list [2]> <list [2]>
在每个单元格内仅应显示 data 字段的值,并且每个单元格都应可更新。
我试图用private byte deviceAddress;
private byte register;
private byte[] data;
作为返回对象来实现某些转换器,但是每次执行转换时,数据网格都会闪烁并绘制新的列和行(这是不可接受的)。
也许存在某种写数据模板的方法来表示这一点?
预期结果应如图所示:
答案 0 :(得分:1)
假设您的数据存储在这样的类中:
public class MyItem
{
public byte deviceAddress { get; set; }
public byte register { get; set; }
public byte[] data { get; set; }
}
并且您有256个此类对象的列表
public List<MyItem> MyMatrix { get; set; }
您可以将ItemsControl
和UniformGrid
用作ItemsPanel:
<ItemsControl ItemsSource="{Binding MyMatrix}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="16"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding data,
Converter={StaticResource yourDataToStringConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如果需要选择一个项目,请使用ListBox而不是ItemsControl。
请注意,必须将Window的DataContext设置为具有MyMatrix
属性的类的实例,并且需要IValueConverter的实现,该实现将data
转换为适当的字符串表示形式(或其他任何形式)