【问题标题】:Matrix presentation of objects in datagrid数据网格中对象的矩阵表示
【发布时间】:2018-07-17 12:42:20
【问题描述】:

我需要将对象列表表示为矩阵。矩阵的大小始终为 16x16。

该对象仅包含 3 个字段:

private byte deviceAddress;
private byte register;
private byte[] data;

每个单元格内应仅显示 data 字段的值,并且每个单元格应可更新

我尝试使用new DataTable 作为返回对象来实现一些转换器,但是每次执行转换时,数据网格都会闪烁并绘制新的列和行(这是不可接受的)。

也许存在某种方式来编写数据模板来表示这一点?

预期结果应该如图所示:

【问题讨论】:

  • 应该显示datadeviceAdress的值?因为数据是一个字节数组,那么,你想怎么显示呢?另外,从图片上看,它看起来很像一个地址
  • 您需要为整个矩阵创建两个虚拟机(一个用于单元格,一个用于行)或使用统一网格作为项目控件的项目面板模板(每个单元格将代表一个具有可绑定数据的虚拟机) ...这取决于您的代码
  • @Magnetron 它应该显示数据的值。这只是一个例子。
  • 你想同时显示 256 个TextBoxes,还是你想要更高效的东西,例如比如DataGrid,它一次只显示一个TextBox
  • @FrankM 我需要 smth,它允许我显示一个列表字段,其中包含 256 个具有预定义结构的元素,例如图片,并且能够将所选项目绑定到某个属性。仅此而已:)我一直在选择解决此问题所需的元素和方法,因为对我来说这不是常规任务:)

标签: c# wpf mvvm datagrid


【解决方案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; }

您可以使用 ItemsControlUniformGrid 作为 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 转换为适当的字符串表示形式(或其他任何形式)。

【讨论】:

  • 为什么是嵌套的 ItemsControl(外面的没有 ItemsPanel)? YouMatrix 可能只是 256 个元素的集合。问题中并不清楚data 应该如何可视化。
  • 我建议了一个列表列表。我认为 Matrix 是一个对象列表,每个对象都包含数据属性。它只想成为一个起点。外部是默认的(StackPanel),内部是一个有 16 列的 UniformGrid。
  • 这比必要的要复杂得多。一个 ItemsControl 就足够了。
  • 我不明白如何使用单个 itemsControl 创建矩阵结构。他需要为我想的行使用数据模板。
  • 通过在单个 ItemsControl 中使用具有 16 列的 UniformGrid。当源集合中有 256 个元素时,UniformGrid 将有 16 列和 16 行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多