【问题标题】:DataGridComboBoxColumn cell not displaying selected item text?DataGridComboBoxColumn 单元格不显示所选项目文本?
【发布时间】:2011-09-24 22:21:12
【问题描述】:

我想知道如何让 DataGridComboBoxColumn 在不处于编辑模式时显示所选项目的文本?并且是否有可能使编辑模式下的组合框最初显示所选项目的文本?

这是我的 XAML:

<DataGridComboBoxColumn Header="Formatter" 
                        SelectedItemBinding="{Binding Path=Format}">
  <DataGridComboBoxColumn.ElementStyle>
    <Style TargetType="">
      <Setter Property="Text" Value="{Binding Path=FormatView.Name}" />
    </Style>
  </DataGridComboBoxColumn.ElementStyle>
  <DataGridComboBoxColumn.EditingElementStyle>
    <Style TargetType="ComboBox">
      <Setter Property="ItemsSource" Value="{Binding Path=DefinedFormatters}" />
      <Setter Property="IsDropDownOpen" Value="True" />
      <Setter Property="ItemTemplate">
        <Setter.Value>
          <DataTemplate>
            <TextBlock Text="{Binding Path=Name}"></TextBlock>
          </DataTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

【问题讨论】:

标签: wpf .net-4.0 datagrid datagridcomboboxcolumn


【解决方案1】:

这是我发现对 DataGridComboBoxColumn 有用的唯一资源:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcomboboxcolumn.aspx

其他所有内容(我在非 MSDN 网站上发现的)都是误导

【讨论】:

    【解决方案2】:

    好吧,我在谷歌上搜索了很多遍后才知道。

    但您似乎只是对 ElementStyle 做同样的事情,再次使用组合框的目标类型,即使它在不编辑时似乎没有显示 ComboBox。

    <DataGridComboBoxColumn Header="Formatter" SelectedItemBinding="{Binding Path=Format}">
            <DataGridComboBoxColumn.ElementStyle>
                <Style TargetType="ComboBox">
                    <Setter Property="ItemsSource" Value="{Binding Path=DefinedFormatters}" />
                    <Setter Property="IsDropDownOpen" Value="True" />
                    <Setter Property="ItemTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <TextBlock Text="{Binding Path=Name}"></TextBlock>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </DataGridComboBoxColumn.ElementStyle>
            <DataGridComboBoxColumn.EditingElementStyle>
                <Style TargetType="ComboBox">
                    <Setter Property="ItemsSource" Value="{Binding Path=DefinedFormatters}" />
                    <Setter Property="IsDropDownOpen" Value="True" />
                    <Setter Property="ItemTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <TextBlock Text="{Binding Path=Name}"></TextBlock>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </DataGridComboBoxColumn.EditingElementStyle>
        </DataGridComboBoxColumn>
    

    【讨论】:

      【解决方案3】:

      我很茫然,但也许可以尝试以下方法:删除 ElementStyle 并设置 DisplayMemberPath,例如:

      <DataGridComboBoxColumn Header="Formatter" SelectedItemBinding="{Binding Path=Format}" DisplayMemberPath="Name">
      

      Path 也可能是 FormatView.Name,我没有清楚地了解您的数据结构。您是如何设置 DataGridComboBoxColumn 的 ItemsSource 的?

      【讨论】:

      • 添加了代码示例,不幸的是我现在无法验证语法正确性
      • 这没有帮助,让我也澄清一下,组合框正在工作并且它成功地将值绑定到数据上下文,唯一的问题是它没有显示当前选择的文本值,只是一个空白单元格。谢谢,
      • 那么如果选择一个新值然后停止编辑,会显示正确的值吗?
      • Visual Studio 输出没有显示绑定表达式错误?而且我注意到 DataGridComboBoxColumn.ElementStyle 的 TargetType 是一个空字符串,甚至在我的工作室中都无法编译。你的代码里写了什么?
      • 我有另一个想法,虽然我越来越绝望;)
      猜你喜欢
      • 2015-08-20
      • 2023-03-14
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多