效果

UI 层代码
引用命名空间
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
<DataGrid
Grid.Row="1" Margin="1,5,1,5" HorizontalContentAlignment="Center"
AutoGenerateColumns="False" HeadersVisibility="All"
ItemsSource="{Binding DataList}"
SelectedItem="{Binding SelectTestResult}"
SelectionMode="Single">
<DataGrid.Columns>
<DataGridTemplateColumn Header="{Binding [Select], Source={x:Static helper:LanguageHelper.Instance}}" HeaderStyle="{StaticResource ColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="cboIsSelect" IsChecked="{Binding IsSelect, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<!-- 关键:绑定 Checked/Unchecked 事件到命令 -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding DataContext.SelectChangedCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" CommandParameter="{Binding}" />
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding DataContext.SelectChangedCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" CommandParameter="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Binding="{Binding Index}"
CanUserSort="False"
ElementStyle="{StaticResource ContentCenterStyle}"
Header="{Binding [Index], Source={x:Static helper:LanguageHelper.Instance}}"
HeaderStyle="{StaticResource ColumnHeaderStyle}"
IsReadOnly="True" />
<DataGridTextColumn
Width="4*"
Binding="{Binding WaferId}"
CanUserSort="False"
ElementStyle="{StaticResource ContentCenterStyle}"
Header="{Binding [WaferID], Source={x:Static helper:LanguageHelper.Instance}}"
HeaderStyle="{StaticResource ColumnHeaderStyle}"
IsReadOnly="True" />
<DataGridTextColumn
Width="150"
Binding="{Binding CreatedOn, Converter={StaticResource DateTimeConverter}}"
CanUserSort="False"
ElementStyle="{StaticResource ContentCenterStyle}"
Header="{Binding [CreatedOnColumn], Source={x:Static helper:LanguageHelper.Instance}}"
HeaderStyle="{StaticResource ColumnHeaderStyle}"
IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
选择列代码(设备数据模板)
<DataGridTemplateColumn Header="{Binding [Select], Source={x:Static helper:LanguageHelper.Instance}}" HeaderStyle="{StaticResource ColumnHeaderStyle}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox x:Name="cboIsSelect" IsChecked="{Binding IsSelect, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<!-- 关键:绑定 Checked/Unchecked 事件到命令 -->
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding DataContext.SelectChangedCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" CommandParameter="{Binding}" />
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding DataContext.SelectChangedCommand, RelativeSource={RelativeSource AncestorType=DataGrid}}" CommandParameter="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
ViewModel
命令
/// <summary>
/// 检测列表 选择改变事件
/// </summary>
public ICommand SelectChangedCommand => new RelayCommand<TestResultModel>(item =>
{
// item 就是当前选中行的实体
if (item.IsSelect)
{
// 勾选
if (!SelectTestResultList.Contains(item))
{
SelectTestResultList.Add(item);
SelectTestResultWaferIdList = string.Join(",", SelectTestResultList.Select(t => t.WaferId));
}
}
else
{
// 取消勾选
if (SelectTestResultList.Contains(item))
{
SelectTestResultList.Remove(item);
SelectTestResultWaferIdList = string.Join(",", SelectTestResultList.Select(t => t.WaferId));
}
}
});