【发布时间】:2018-07-18 07:53:39
【问题描述】:
我需要将对象RegisterBean 的可更新列表ObservableCollection<RegisterBean> listOfRegisters 表示为具有行和列标题的矩阵对象包含3 个属性:
byte deviceAddress;
byte register;
byte[] data;
并且应该只显示一个属性数据。 预期结果类似于图像:
我使用通常的数据网格达到了这个结构,但问题是更新它,因为我使用了一个带有new DataTable() 作为返回值的转换器。这是不正确的,因为它会闪烁并重新渲染所有对象。
我昨天寻求帮助 here。这个解决方案正在奏效:
<ItemsControl ItemsSource="{Binding listOfRegisters}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="16"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Data, Converter={StaticResource ByteToStringValueConverter}}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但我不明白如何更改用户控件的结构并添加标题。使用itemscontrol 解决的结果:
谢谢!
更新: 标题应该是静态的,没有任何排序之类的东西
【问题讨论】:
-
ItemsControl没有列。GridView确实(例如ListView使用它)。 -
所以你有一个大部分工作的
DataGrid有一个小更新问题,而不是尝试修复更新问题,你决定将整个基础架构降级到ItemsControl,然后你想知道如何将ItemsControl改进到表现得更像DataGrid? -
@grek40 你 100% 正确,但我觉得这是解决我问题的方法。如果您有任何建议 - 欢迎您:)
-
您能否举一个
RegisterBean对象的具体示例,该对象具有deviceAddress、register和data的具体值(请多字节)并解释它将出现在哪一行/哪一列,将显示什么以及如何对其进行编辑? -
@grek40 这是从
0x00到0xFF的设备寄存器的表示。长度可以是 1 或 2 个字节(取决于设备)。每个单元格显示RegisterBean的Data属性。例如:deviceAddress = 0x60, register 0x5A, data = { 0xFF }。 DeviceAddress 仅用于绑定所选项目并在以后使用它(我没有在这个具体视图上显示它)。寄存器值给了我具体 bean 在数据网格中的位置(0x5A将在行0x5和列A的交点处)。数据应该像图片一样显示为单元格值。