如何在DataGridTemplateColumn中访问Combobox.ItemSource属性

时间:2012-10-04 16:32:02

标签: c# wpf xaml

如果我在XAML中有DataGridComboBoxColumn

<DataGridComboBoxColumn Header="Department Id" x:Name="comboboxColumn1"

我可以使用

在代码中引用comboboxColumn1.Itemsource
comboboxColumn1.ItemsSource = comboboxSource;

如果我现在使用DataGridTemplateColumn ......

<DataGridTemplateColumn x:Name="Col2" Header="name">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox x:Name="Combobox2" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

如何在代码中设置Combobox2.ItemSource?

1 个答案:

答案 0 :(得分:2)

是否在代码背后?

您正在构建DataTemplate,这是WPF需要呈现特定DataGridCell时使用的模板。因此,您的ComboBox永远不会有一个实例,而是显示DataGridCells的实例(这就是您无法通过Name实际引用该项目的原因)。

如果我 在代码隐藏中设置ItemsSource,我只需在ComboBox上放置一个Loaded事件并将其设置在那里。

如果ItemsSource不是静态的,那么您可以使用ItemContainerGenerator获取特定DataGrid项的模板,并通过它找到它。

但实际上您应该使用ItemsSource在XAML中设置StaticResource,或者如果可以,则设置绑定,因此我建议使用{设置如何通过XAML设置绑定{1}}或RelativeSource绑定首先查找包含ElementName的任何对象,并且只有在必须时才会使用代码隐藏。

另外,ItemsSource的工作原因是因为您设置的是comboboxColumn1.ItemsSource = comboboxSource;,而不是DataGridComboBoxColumn.ItemsSource,并且只有一个名为ComboBox.ItemsSource的对象