, , DataGrid, Combobox, , , Name Item,
, , :
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public Item Item { get; set; }
}
, ( ):
public class Item
{
public string Name { get; set; }
}
, , DataContext :
public partial class MainWindow : Window
{
public List<Item> Items { get; set; }
public List<User> Users { get; set; }
public MainWindow()
{
InitializeComponent();
Items = new List<Item> {
new Item { Name = "firstItem" },
new Item { Name = "secondItem" },
new Item { Name = "thirdItem" },
};
Users = new List<User>{
new User { Id = 1, Name = "Bill", Item = new Item { Name = "firstItem" }},
new User { Id = 2, Name = "Steeve", Item = new Item { Name = "secondItem" }}
};
DataContext = this;
}
}
XAML:
<Grid>
<DataGrid Name="testGrid" AutoGenerateColumns="False" ItemsSource="{Binding Users}">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridComboBoxColumn
DisplayMemberPath="Name"
SelectedValuePath="Name"
SelectedValueBinding="{Binding Item.Name}"
Header="Item">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=Items, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="{x:Type ComboBox}">
<Setter Property="ItemsSource" Value="{Binding Path=Items, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
:

, , :)