0

如果我在 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 ?

4

1 回答 1

2

必须在代码后面吗?

您正在构建一个DataTemplate,它是每当 WPF 需要呈现该特定 DataGridCell 时使用的模板。因此,您的 ComboBox 永远不会有一个实例,而是与您显示的 DataGridCells 一样多的实例(这就是您实际上不能按名称引用该项目的原因)。

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

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

但实际上,您应该ItemsSource使用a或绑定StaticResource在 XAML 中设置如果绝对必须使用代码隐藏。RelativeSourceElementNameItemsSource

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

于 2012-10-04T17:05:54.887 回答