xaml文件中
第一种方式:在对应的cs中实现
<Grid>
<DataGrid Name="DG1" Grid.Row="5" Grid.ColumnSpan="4" ItemsSource="{Binding MyList,Mode=TwoWay}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Width="550" Header="测试1" IsReadOnly="True" Binding="{Binding ShowName}" />
<DataGridTextColumn Width="250" Header="测试2" IsReadOnly="True" Binding="{Binding FunctionName}"/>
<!--这里是具体使用Chekbox-->
<DataGridTemplateColumn Header="CheckBox测试 Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!--Binding isEnable是类中的属性叫做isEnable 自己可以随便定义即可(定义Bool类型)-->
<CheckBox HorizontalAlignment="Center" Click="CheckBox_Click" IsChecked="{Binding IsEnable}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="250" IsReadOnly="true" CellStyle="{StaticResource NoBoundaryDataGridCell}" Header="其他测试" Binding="{Binding ExpiryDate,Mode=TwoWay}"/>
</DataGrid.Columns>
<DataGrid>
对应的CS文件中事件
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox checkBox = sender as CheckBox;
if (checkBox != null)
{
var cntr = DG1.ItemContainerGenerator.ContainerFromIndex(DG1.SelectedIndex); //这里是拿到所选中行
FunctionItem selectItem = (FunctionItem)(cntr as DataGridRow).DataContext; //这里是把选中行转换为对象,进而拿到CheckBox中绑定的名字
foreach (var vItem in MyList)
{
selectItem.isEnable = false; .//这里是拿到MyList类中的isEnable属性 即上面 xmal中 Checkbox中绑定的变量
}
}
}
第二种实现:MVVM结构
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox IsChecked= "True"HorizontalAlignment = "Center"
Command= "{Binding Path=DataContext.CheckAllCommand,
RelativeSource={RelativeSource AncestorType=DataGrid}}"
CommandParameter= "{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
在VM中实现 DataContext.CheckAllCommand方法即可。