Одна вещь, которая кажется неправильной, это то, что вы, вероятно, должны использовать SelectedValueBinding, а не SelectedItemBinding.
Вот пример, который мне подходит:
<Page.Resources>
<ViewModel:DataGridComboBoxViewModel x:Key="model"/>
<Style x:Key="ElementStyle" TargetType="ComboBox">
<Setter
Property="ItemsControl.ItemsSource"
Value="{Binding Path=DataContext.DetailItems, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"
/>
</Style>
</Page.Resources>
<Grid DataContext="{StaticResource model}">
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridComboBoxColumn Header="Combo"
DisplayMemberPath="Name"
SelectedValueBinding="{Binding DetailItem}"
ElementStyle="{StaticResource ElementStyle}"
EditingElementStyle="{StaticResource ElementStyle}"
>
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
public class DataItem : ViewModelBase
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
private DetailItem _detailItem;
public DetailItem DetailItem
{
get { return _detailItem; }
set
{
Debug.WriteLine(value != null
? string.Format("Setting detail item to: {0}", value.Name)
: "Setting detail item to null.");
Set(() => DetailItem, ref _detailItem, value);
}
}
}
public class DetailItem : ViewModelBase
{
public int Id { get; set; }
public string Name { get; set; }
}
public class DataGridComboBoxViewModel : ViewModelBase
{
public DataGridComboBoxViewModel()
{
DetailItems = new List<DetailItem>
{
new DetailItem {Id = 0, Name = "Zero"},
new DetailItem {Id = 1, Name = "One"},
new DetailItem {Id = 2, Name = "Two"},
new DetailItem {Id = 3, Name = "Three"},
};
Items = new List<DataItem>
{
new DataItem {Id = 0, Name = "Item 1", Description = "This is item 1"},
new DataItem {Id = 1, Name = "Item 2", Description = "This is item 2"},
new DataItem {Id = 2, Name = "Item 3", Description = "This is item 3"},
new DataItem {Id = 3, Name = "Item 4", Description = "This is item 4"},
};
}
public List<DataItem> Items { get; set; }
public List<DetailItem> DetailItems { get; private set; }
}