我有一个DataGrid绑定在带有一些枚举和字符串的对象的简单ObservableCollection上。 (5个枚举和2个要激励的字符串)。现在,其中两个枚举(它们是相同的类型)需要使用它们的描述符显示在comboBox中。但我无法弄清楚如何告诉各列使用枚举的描述。
这是我的dataGrid
<DataGrid x:Name="dataGrid" ItemsSource="{Binding StartConditions}" CanUserReorderColumns="False" CanUserSortColumns="False"
AutoGenerateColumns="True" CanUserResizeRows="False" CanUserAddRows="False" CellStyle="{StaticResource DataGridCellStyle}"
SelectedItem="{Binding SelectedStartCondition}">
</DataGrid>
这是我绑定描述的枚举。
enum Size
{
[Description("8-Bit")]
EightBit,
[Description("16-Bit")]
SixteenBit,
Bit0,
Bit1,
Bit2,
Bit3,
Bit4,
Bit5,
Bit6,
Bit7,
Lower4,
Upper4
}
这就是我的DataGrid的外观。
需要描述的两列是Size1和Size2。 列是自动生成的,我只是想弄清楚如何使用枚举描述。
答案 0 :(得分:0)
您想要实现的目标是可能的,但在性能方面有点棘手且不太明智。您将修改列生成过程以显示正确的文本。
首先,请附加到DataGrid
的{{3}}事件:
<DataGrid x:Name="dataGrid"
...
AutoGeneratingColumn="dataGrid_AutoGeneratingColumn" />
</DataGrid>
在此处理程序中,您可以修改列:
void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
// e.Column contains the generated column
}
其次,您可以访问e.Column
媒体资源并应用DataTemplate
。
然后,DataTemplate
会使用转换器在ComboBoxColumn
中显示正确的文字。这个转换器会尝试解析&#34;枚举成员属性作为显示名称,或只显示实际的枚举值。
编辑#1:
正如OP所提到的,DataGridColumn
并未提供CellTemplate
属性。
因此,您必须覆盖事件处理程序中创建的列:
var oldColumn = e.Column;
var newColumn = new DataGridTemplateColumn();
// Copy required properties from 'oldColumn' to 'newColumn'
// Create cell template (or load from XAML resources)
var cellTemplate = new DataTemplate();
// modify template...
newColumn.CellTemplate = cellTemplate;
e.Column = newColumn;