C# WPF DataGrid下面 使用CheckBox 选中事件

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结构

<Da​​taGridTemplateColumn.HeaderTemplate>
     <DataTemplate>
         <CheckBox IsChecked= "True"Horizo​​ntalAlignment = "Center"
                       Command= "{Binding Path=DataContext.CheckAllCommand,
                       RelativeSource={RelativeSource AncestorType=DataGrid}}"
                       CommandParameter= "{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" />
     </DataTemplate>
 </DataGridTemplateColumn.HeaderTemplate>

在VM中实现 DataContext.CheckAllCommand方法即可。


版权声明:本文为immotal_xiaoqiang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。