DataGridComboBoxColumn中的“ComboBoxItem的内联集合”

时间:2016-04-29 22:39:17

标签: wpf xaml datagrid

MSDN说:

  

要填充下拉列表,请先为其设置ItemsSource属性   ComboBox使用以下选项之一:

     
      
  • 静态资源。有关更多信息,请参阅StaticResource标记扩展。
  •   
  • 一个x:静态代码实体。有关更多信息,请参见x:静态标记扩展。
  •   
  • ComboBoxItem类型的内联集合。
  •   

使用“ 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类型的内联集合”是什么意思呢?

1 个答案:

答案 0 :(得分:1)

此处的关键是DataGridComboBoxColumn不是ComboBox,引用的文档片段不适用。

我认为,为什么你不能在列定义中添加ComboBoxItem元素的原因是,它会造成多次将它们添加到可视树中的问题(在填充每个ComboBox时项目将被重复使用&#34;而不是克隆)。

据我所知,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元素。