【问题标题】:Show different text when DataGridComboBoxColumn is not in edit mode当 DataGridComboBoxColumn 不处于编辑模式时显示不同的文本
【发布时间】:2014-04-29 11:31:08
【问题描述】:

我有一个 DataGridComboBoxColumn,它绑定到类型为 MyItem 的对象集合。 MyItem 有两个字符串属性:Description 和 Shortcut。

如果列未处于编辑模式,我想显示快捷方式属性中的字符串,如果列处于编辑模式,我想显示描述属性中的字符串。

如果没有 DataGridTemplateColumn 这可能吗?

更多信息: 目前我已将 DisplayMemberPath 属性设置为“描述”。

【问题讨论】:

    标签: wpf datagrid datagridcomboboxcolumn


    【解决方案1】:

    我发现最好的方法是使用DataGridTemplateColumn 而不是DataGridComboBoxColumn

    DataGridComboBoxColumn 既不公开CellTemplate(未编辑时显示)也不公开CellEditingTemplate(编辑时显示),而是根据您提交该专栏的绑定为您构建ComboBox 模板。由于您希望它们有所不同,因此您需要一个公开这两个成员的列,即DataGridTemplateColumn

    只需将CellTemplateLabel 绑定到您的Shortcut 属性,将CellEditingTemplateComboBox 绑定到与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,缺少这些,看起来很奇怪,需要一些按摩才能看起来正确。

    【讨论】:

    • 感谢您的示例。我希望在没有 DataGridTemplateColumn 的情况下做到这一点,但我想这是不可能的:/
    • 如果你真的想,你也可以使用datagridcombobox列,并使用样式来覆盖CellTemplate。但是,这可能不起作用(内联定义的任何内容都不能使用样式设置器设置)并且需要与 TemplateColumn 解决方案一样多的标记,因此我通常不推荐它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2020-08-11
    • 2020-02-29
    相关资源
    最近更新 更多