围绕WPF DataGrid的某些字符串创建包装类的最简单方法是什么?

时间:2010-05-18 01:29:44

标签: c# wpf datagrid wrapper

我正在用C#构建一个简单的十六进制编辑器,我决定使用DataGrid中的每个单元来显示一个字节*。我知道DataGrid将获取一个列表并将列表中的每个对象显示为一行,并将该对象的每个属性显示为列。我想显示每行16个字节的行,这将需要一个包含16个字符串属性的包装器。虽然可行,但它并不是最优雅的解决方案。有没有更简单的方法?我已经尝试在大小为16的公共字符串数组周围创建一个包装器,但这似乎不起作用。

由于

*这个的基本原理是我可以在每个字节之间有空格,而不必在我想保存我编辑的文件时将它们全部删除。此外,似乎更容易标记行和列。

2 个答案:

答案 0 :(得分:1)

我会考虑在ColumnDefinitions和动态RowDefinitions集合中创建一个包含16列的常规网格,并在每个单元格中放置无边框TextBox。您需要重载一些键处理以使用户更容易在文本框之间导航,但DataGrid的单元格也需要类似的东西。

如果您仍想使用DataGrid,则将ItemsSource指向16个大小的数组列表应该可以正常工作。从代码中创建16 DataGridTextColumns。每个Binding = new Binding(string.Format("[{0}]", i)),其中i为0..15。索引属性只是另一个属性,您可以轻松绑定到它。这些不必是字符串数组:使用字节并在十六进制字符串和字节之间创建一个IValueConverter。哦,关掉AutoGenerateColumns

答案 1 :(得分:1)

我建议你使用MultiBinding。

     <my:DataGrid ItemsSource="{Binding HexDataArray}">
        <my:DataGrid.Columns>
            <my:DataGridTemplateColumn>
                <my:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock>
                          <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0} {1} ...">
                              <Binding Path="Array[0]" />
                              <Binding Path="Array[1]" />
                                .........................
                            </MultiBinding>
                          </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </my:DataGridTemplateColumn.CellTemplate>
            </my:DataGridTemplateColumn>
        </my:DataGrid.Columns>
    </my:DataGrid>