Здесь я создал ObservableCollection продукта и категории с именем ProductSet & ListOfCategory на уровне окна.
public ObservableCollection<Category> ListOfCategory { get; set; }
public ObservableCollection<Product> ProductSet { get; set; }
Я создал оба объекта ObservableCollection в коде за окном. Вы можете создать модель в представлении, которая лучше подходит.
Я назвал окно "Window1" x: Name = "Window1"
Поскольку вам необходимо связать контекст данных, сделал elementBinding с Window1, а также установил ItemsSource = "{Binding ProductSet}". Итак, что здесь происходит, так это то, что в ProuctSet выполняется поиск DataContext, который, в свою очередь, ищется внутри класса Window1.
Для DataGridComboBoxColumn установите ItemsSource, используя Стиль, и найдите Datagrid DataContext, у которого ListOfCategory, используя Относительный источник.
<DataGrid AutoGenerateColumns="False" x:Name="DataGrid1" HorizontalAlignment="Left" Height="135" Margin="21,288,0,0" VerticalAlignment="Top" Width="729" DataContext="{Binding ElementName=Window1}" ItemsSource="{Binding ProductSet}" >
<DataGrid.Columns>
<DataGridTextColumn Header="ProductID" Width="175" Binding="{Binding ProductID}"></DataGridTextColumn>
<DataGridComboBoxColumn Header="Category" DisplayMemberPath="Name" SelectedValuePath="CategoryID" SelectedItemBinding="{Binding ListOfCategory}">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ListOfCategory, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.ListOfCategory,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="Name" Width="175" Binding="{Binding Name}"></DataGridTextColumn>
<DataGridTextColumn Header="Price " Width="175" Binding="{Binding Price }"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Если вы собираетесь связывать с использованием модели представления, укажите имя класса модели представления вместо привязки элемента.