WPF DataGrid CheckBox 多选 反选 全选
效果图

实现此效果的必要关键是
Style+DataTemplate
关键代码:
<Window.Resources>
<DataTemplate x:Key="CheckBoxDataTemplate">
<Grid>
<CheckBox
Click="CheckBox_Checked"
Uid="{Binding id}"
IsChecked="{Binding IsSelect , Mode=TwoWay}">
</CheckBox>
</Grid>
</DataTemplate> <Style x:Key="CheckBoxStyle" TargetType="{x:Type DataGridCell}">
<Setter Property="ContentTemplate" Value="{StaticResource CheckBoxDataTemplate}"/>
</Style> </Window.Resources>
<Grid>
<DataGrid x:Name="TST" >
<DataGrid.Columns>
<DataGridCheckBoxColumn CellStyle="{StaticResource CheckBoxStyle}" Header="选择">
<DataGridCheckBoxColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Content="全选" Uid="-1" Click="CheckBox_Checked"/>
</DataTemplate>
</DataGridCheckBoxColumn.HeaderTemplate>
</DataGridCheckBoxColumn>
<DataGridTextColumn Width="15*" Header="顺序" Binding="{Binding id}" />
</DataGrid.Columns >
</DataGrid>
</Grid>
通过Style中的Setter来引入模板。
模板中则是CheckBox。
这样一来,DataGrid中的数据行的复选框也都可以触发事件了。
那么,在头部中的复选框则是使用修改DataGridCheckBoxColumn.HeaderTemplate来实现头部的复选框。
另外必要说明的是,你可以对绑定类使用INotifyPropertyChanged接口,并 ObservableCollection集合类。
后台的绑定类:
public class TEST : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private bool? isSelect;
public int id { get; set; }
public bool? IsSelect
{
get { return isSelect; }
set
{
isSelect = value; OnChanged(new PropertyChangedEventArgs("IsSelect"));
}
} protected void OnChanged(PropertyChangedEventArgs arg)//具体方法
{
PropertyChanged?.Invoke(this, arg);
}
}
主要实现代码:
ObservableCollection<TEST> ts = new ObservableCollection<TEST>();
public MainWindow()
{
InitializeComponent();
TST.AutoGenerateColumns = false;
TST.CanUserAddRows = false;
for (var i = ; i < ; i++)
{
ts.Add(new TEST() { IsSelect = false, id = i });
}
TST.ItemsSource = ts;
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
var Check = (sender as CheckBox);
var CUID = int.Parse(Check.Uid);
//全选
if (CUID==-)
{
foreach (var item in ts)
item.IsSelect = true;
Check.Uid = "-2";
return;
}
//全否选
if (CUID==-)
{
foreach (var item in ts)
item.IsSelect = false;
Check.Uid = "-1";
return;
}
var IsSelcted = ts[CUID].IsSelect;
ts[CUID].IsSelect = (IsSealed ? false : true);
var IsSelects = from s in ts
where s.IsSelect == true
select s;
if(IsSelects.Count()==)
{
var Text = String.Empty;
foreach (var ITEM in IsSelects)
Text += ITEM.id + " \n";
MessageBox.Show(Text);
}
}
WPF DataGrid CheckBox 多选 反选 全选的更多相关文章
- vue实现单选多选反选全选全不选
单选 当我们用v-for渲染一组数据的时候,我们可以带上index以便区分他们我们这里利用这个index来简单地实现单选 <li v-for="(item,index) in radi ...
- 表单javascript checkbox全选 反选 全不选
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Android开发CheckBox控件,全选,反选,取消全选
在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...
- JQuery实现 checkbox 全选、反选,子checkbox有没选去掉全选
1. 全选的checkbox选中时,子checkbox全部选中.反之,全部不选 2.子checkbox中,只要有没有被选中的,取消全选checkbox的选中 3.子checkbox的数量和子check ...
- 转载:Bootstrap之表格checkbox复选框全选
转:http://blog.csdn.net/shangmingchao[商明超的博客] 效果图: HTML中无需添加额外的一列来表示复选框,而是由JS完成,所以正常的表格布局就行了: 版权声明:如需 ...
- Bootstrap之表格checkbox复选框全选
效果图: HTML中无需添加额外的一列来表示复选框,而是由JS完成,所以正常的表格布局就行了: <table class="table table-bordered table-hov ...
- 复选框全选、全不选和反选的效果实现VIEW:1592
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Bootstrap之表格checkbox复选框全选 [转]
转自: http://blog.csdn.net/shangmingchao/article/details/49761315 效果图: HTML中无需添加额外的一列来表示复选框,而是由JS完成,所以 ...
- html+css+js实现复选框全选与反选
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- 1050 String Subtraction
题意:给出两个字符串s1和s2,在s1中删去s2中含有的字符. 思路:注意,因为读入的字符串可能有空格,因此用C++的getline(cin,str).PAT系统迁移之后C语言中的gets()函数被禁 ...
- thinkphp使用自定义类方法
1.通过Model调用 <?php /** * 积分模型 api接口 */ class ApiModel{ private $url = 'http://js.yunlutong.com/Cus ...
- mysql特性及部署规范
--分支版本,mysql对cpu,内存,io子系统资源利用特点--oracle mysql,mariadb,percona server--部署规范建议,系统安装,mysql安装,其他规范互联网业务为 ...
- MVC 公共类App_Code不识别
.Net MVC需要写公共类的时候 右击添加 App_Code 文件夹,新建类—>右击类—>属性,生成操作 —>选择 —>编译 .net MVC项目本身是个应用程序,所以其实不 ...
- Flask之数据库操作
4.2 数据库基本操作 在Flask-SQLAlchemy中,插入.修改.删除操作,均由数据库会话管理.会话用db.session表示.在准备把数据写入数据库前,要先将数据添加到会话中然后调用comm ...
- Redhat 无线(Wifi)上网命令行配置
小结两种命令行模式下配置无线wife的方法,实践测试通过(Red Hat Enterprise Linux release 6.0 Beta(Santiago)) 一.使用wpa_supplicant ...
- 实例解说Linux命令行uniq
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行.在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的.该命令加工后的结果 ...
- MySQL的FORMAT函数用法规则
1.FORMAT函数在mysql中是数据内容格式化的,格式化后得到结果:###,###,#####. ,); 输出结果: ,000.00 2.可以格式化数据为整数或者浮点数. ); 输出结果: 100 ...
- Linux下zip格式文件的解压缩和压缩
Linux下zip格式文件的解压缩和压缩 Linux下的软件包很多都是压缩包,软件的安装就是解压缩对应的压缩包.所以,就需要熟练使用常用的压缩命令和解压缩命令.最常用的压缩格式有.tar.gz/tgz ...
- Hadoop完全分布式环境搭建(三)——基于Ubuntu16.04安装和配置Java环境
[系统环境] 1.宿主机OS:Win10 64位 2.虚拟机软件:VMware WorkStation 12 3.虚拟机OS:Ubuntu16.04 4.三台虚拟机 5.JDK文件:jdk-8u201 ...