数据网格组合框列中的内联ComboBoxItem集合

4

MSDN指出:

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

  • 静态资源。有关更多信息,请参见StaticResource标记扩展。
  • x:Static代码实体。有关更多信息,请参见x:Static标记扩展。
  • 一个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类型集合”是什么意思呢?

2个回答

4
重要的一点是,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元素。

0

只需在ItemsSource内部使用CompositeCollection即可。

<DataGrid>
    <DataGrid.Columns>
        <DataGridComboBoxColumn>
            <DataGridComboBoxColumn.ItemsSource>
                <CompositeCollection>
                    <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" />
                </CompositeCollection>
            </DataGridComboBoxColumn.ItemsSource>
        </DataGridComboBoxColumn>
    </DataGrid.Columns>
</DataGrid>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接