MVVM模式下DataGrid中嵌入ComboBox并数据绑定,这里给出一个完美的解决方案,首先是准备好数据源,下面代码中蓝色部分就是数据源,如何创建数据源这里不赘述,可以查看“
采用MVVM数据绑定TreeView控件—陈宽博客WPF专题”这篇文章来学习。注意下面代码的红色部分是关键性代码。
<DataGrid ItemsSource="{BindingProductList}" AutoGenerateColumns="False"
Name="GridProduct" AlternatingRowBackground="Azure"
BorderThickness="1" VerticalGridLinesBrush="LightGray"
HorizontalGridLinesBrush="LightGray" Grid.Row="1" SelectionChanged="GiveProduct">
<DataGrid.Columns>
<DataGridTemplateColumn Header="选择">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}" Margin="5"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="产品名称" Width="100" Binding="{Binding ProductName}"/>
<DataGridTextColumn Header="材质" Width="80" Binding="{Binding Material}"/>
<DataGridTextColumn Header="规格" Width="80" Binding="{Binding ProductSpec}"/>
<DataGridTextColumn Header="公差" Width="80" Binding="{Binding Tolerance}"/>
<DataGridTextColumn Header="产地" Width="80" Binding="{Binding Address}"/>
<DataGridComboBoxColumn Header="供应商">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.ProductSupplier}" />
<Setter Property="SelectedValue" Value="{Binding Supplier, UpdateSourceTrigger=PropertyChanged}" />
<Setter Property="SelectedValuePath" Value="ID" />
<Setter Property="DisplayMemberPath" Value="SupplierCompany" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type
Window}}, Path=DataContext.ProductSupplier}" />
<Setter Property="SelectedValue" Value="{Binding Supplier,
UpdateSourceTrigger=PropertyChanged}" />
<Setter Property="SelectedValuePath" Value="ID" />
<Setter Property="DisplayMemberPath" Value="SupplierCompany" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="备注" Binding="{Binding Memo}"/>
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu Name="dgmenu1" StaysOpen="true">
<MenuItem Header="添加" Command="{Binding SaveCommand}">
<MenuItem.Icon>
<Image Source="/WPF_SAAMS;component/Resource/add.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="修改" Command="{Binding UpdateCommand}">
<MenuItem.Icon>
<Image Source="/WPF_SAAMS;component/Resource/save.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="删除" Command="{Binding DelCommand}">
<MenuItem.Icon>
<Image Source="/WPF_SAAMS;component/Resource/Del.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>