在这里,我在窗口级别创建了名称为 ProductSet 和 ListOfCategory 的产品和类别的 ObservableCollection。
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,并使用相对源搜索具有ListOfCategory 的Datagrid DataContext。
<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}"/>
<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 Header="Price " Width="175"
Binding="{Binding Price }"/>
</DataGrid.Columns>
</DataGrid>
如果您要使用 View 模型进行绑定,则提供 Viewmodel 的类名称而不是元素绑定。