If you using AutoGenerateColumns="True"
you should using AutoGeneratingColumn
event (msdn).
XAML:
<DataGrid x:Name="myDataGrid" ItemsSource="{Binding}"
AutoGenerateColumns="True"
AutoGeneratingColumn="myDataGrid_AutoGeneratingColumn"/>
Code-behind:
private void myDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName == "Sections")
{
var cb = new DataGridComboBoxColumn();
cb.Header = "Sections";
cb.ItemsSource = new List<string> { "C50", "C40", "C30" };
cb.SelectedValueBinding = new Binding("Sections");
e.Column = cb;
}
}
Solution with AutoGenerateColumns="False"
:
XAML:
<DataGrid x:Name="myDataGrid" ItemsSource="{Binding}"
AutoGenerateColumns="False"
>
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" />
<DataGridTextColumn Header="X" Binding="{Binding X}" />
<DataGridTextColumn Header="Y" Binding="{Binding Y}" />
<DataGridTextColumn Header="StartElevation" Binding="{Binding StartElevation}" />
<DataGridTextColumn Header="EndElevation" Binding="{Binding EndElevation}" />
<DataGridTextColumn Header="FoundationHeight" Binding="{Binding FoundationHeight}" />
<DataGridComboBoxColumn x:Name="cbSections" Header="Sections" SelectedItemBinding="{Binding Sections}"/>
</DataGrid.Columns>
</DataGrid>
Code-behind:
...
{
...
myDataGrid.ItemsSource = data;
cbSections.ItemsSource = new List<string> { "C50", "C40", "C30" };
...
}