如果我在XAML中有DataGridComboBoxColumn
<DataGridComboBoxColumn Header="Department Id" x:Name="comboboxColumn1"
我可以使用
在代码中引用comboboxColumn1.ItemsourcecomboboxColumn1.ItemsSource = comboboxSource;
如果我现在使用DataGridTemplateColumn ......
<DataGridTemplateColumn x:Name="Col2" Header="name">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="Combobox2" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
如何在代码中设置Combobox2.ItemSource?
答案 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
的对象