wpf - DataGridComboBoxColumn 中的 "An inline collection of ComboBoxItem"

标签 wpf xaml datagrid

MSDN说:

To populate the drop-down list, first set the ItemsSource property for the ComboBox by using one of the following options:

  • A static resource. For more information, see StaticResource Markup Extension.
  • An x:Static code entity. For more information, see x:Static Markup Extension.
  • An inline collection of ComboBoxItem types.


对于“ ComboBoxItem 类型的内联集合 ”,我想到了这样的事情:
<DataGrid>
  <DataGrid.Columns>
    <DataGridComboBoxColumn>
      <ComboBoxItem Content="None" Tag="0" />
      <ComboBoxItem Content="Few" Tag="1" />
      <ComboBoxItem Content="Some" Tag="2" />
      <ComboBoxItem Content="Enough" Tag="3" />
      <ComboBoxItem Content="Lots" Tag="4" />
      <ComboBoxItem Content="Too much" Tag="5" />
    </DataGridComboBoxColumn>
 </DataGrid.Columns>
</DataGrid>

但它不起作用。我知道填充 DataGridComboBoxColumn 的另一种方法,但我对此很好奇,这是因为我在研究中没有发现任何相关内容......那么“ComboBoxItem 类型的内联集合”是什么意思?

最佳答案

这里的关键是DataGridComboBoxColumn不是 ComboBox并且引用的文档片段不适用。

无法添加的原因ComboBoxItem我认为,列定义中的元素会导致将它们多次添加到可视化树中的问题(在填充每个 ComboBox 后,这些项目将被“重用”而不是克隆)。

据我所知,DataGridComboBoxColumn只是一个列定义,它暴露了一些 ComboBox属性,默认情况下显示为 ComboBox .我的观点是,没有任何额外的功能是 DataGridTemplateColumn 无法实现的。 .

这是一个可以帮助您入门的替代方法:

<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox>
                        <ComboBoxItem Content="None" Tag="0" />
                        <ComboBoxItem Content="Few" Tag="1" />
                        <ComboBoxItem Content="Some" Tag="2" />
                        <ComboBoxItem Content="Enough" Tag="3" />
                        <ComboBoxItem Content="Lots" Tag="4" />
                        <ComboBoxItem Content="Too much" Tag="5" />
                    </ComboBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

与之前的情况相反,这次它有效,因为 ComboBoxItem元素在 DataTemplate 内定义,这意味着 XAML 处理器实际上将它们转换为 FrameworkElementFactory对象,反过来又能够生成模板化 ComboBoxItem按需元素。

关于wpf - DataGridComboBoxColumn 中的 "An inline collection of ComboBoxItem",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948539/

相关文章:

c# - 在 Visual Studio 中调试时激活自定义新窗口

c# - 如何在内容控件上显示数据模板?

c# - WPF 将文本框绑定(bind)到 ViewModel

c# - ListBox 复选框命令绑定(bind)

WPF MVVM 获取文本框数据到 ViewModel

wpf - 提高动画平滑度(控件的移动)

wpf - Wpf DataGrid 中的多行选择

wpf - 如何防止在第一次单击时选择整个DataGrid行?

java - Apache 点燃: Continuous Async Query is not working continuous

wpf - 将 Caliburn Micro Screen(UserControl) 添加到 WPF MVVM 中的 Canvas ?