我有一个DataGridComboBoxColumn,它绑定到一个对象集合,其类型是MyItem。 MyItem有两个字符串属性:描述和快捷方式。
如果列不处于编辑模式,我想显示快捷方式属性中的字符串,如果列处于编辑模式,我想显示描述属性中的字符串。
如果没有DataGridTemplateColumn,这可能吗?
更多信息: 目前我已将DisplayMemberPath属性设置为“Description”。
答案 0 :(得分:2)
我发现,最好的方法是使用DataGridTemplateColumn
代替DataGridComboBoxColumn
。
DataGridComboBoxColumn
不公开CellTemplate
(不编辑时显示)或CellEditingTemplate
(编辑时显示),而是为您构建ComboBox
模板在你提交列的绑定上。由于您希望这些不同,因此您需要一个公开这两个成员的列,即DataGridTemplateColumn
。
只需将CellTemplate
一个Label
绑定到您的Shortcut
媒体资源,CellEditingTemplate
一个ComboBox
使用与您提供的绑定相同的绑定{1}}。
毕竟,你的专栏看起来应该是这样的
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
,缺少这些,看起来很奇怪,需要一些按摩才能看起来正确。