Я обнаружил, что лучший способ сделать это — использовать DataGridTemplateColumn
вместо DataGridComboBoxColumn
.
DataGridComboBoxColumn
не предоставляет ни CellTemplate
(отображается, когда не редактируется), ни CellEditingTemplate
(отображается при редактировании), а вместо этого создает для вас шаблоны ComboBox
на основе привязок, которые вы передаете столбцу. Поскольку вы хотите, чтобы они были разными, вам нужен столбец, в котором представлены оба этих элемента, то есть DataGridTemplateColumn
.
Просто привяжите CellTemplate
к Label
вашей собственности Shortcut
, а CellEditingTemplate
к ComboBox
с теми же привязками, которые вы присвоили своему DataGridComboBoxColumn
.
После всего этого ваша колонка должна выглядеть примерно так
<DataGridTemplateColumn Header="...">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Label Content="{Binding Shortcut}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="..."
DisplayMemberPath="Description"
SelectedItem="..."/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Приложение. Причина, по которой я рекомендую использовать здесь Label
вместо TextBlock
, заключается в том, что Label
автоматически включает выравнивание и поля. TextBlock
, без них, выглядит очень странно и нуждается в некотором массаже, чтобы выглядеть правильно.
person
David
schedule
29.04.2014