效果图

实现此效果的必要关键是

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 多选 反选 全选的更多相关文章

  1. vue实现单选多选反选全选全不选

    单选 当我们用v-for渲染一组数据的时候,我们可以带上index以便区分他们我们这里利用这个index来简单地实现单选 <li v-for="(item,index) in radi ...

  2. 表单javascript checkbox全选 反选 全不选

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  3. Android开发CheckBox控件,全选,反选,取消全选

    在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...

  4. JQuery实现 checkbox 全选、反选,子checkbox有没选去掉全选

    1. 全选的checkbox选中时,子checkbox全部选中.反之,全部不选 2.子checkbox中,只要有没有被选中的,取消全选checkbox的选中 3.子checkbox的数量和子check ...

  5. 转载:Bootstrap之表格checkbox复选框全选

    转:http://blog.csdn.net/shangmingchao[商明超的博客] 效果图: HTML中无需添加额外的一列来表示复选框,而是由JS完成,所以正常的表格布局就行了: 版权声明:如需 ...

  6. Bootstrap之表格checkbox复选框全选

    效果图: HTML中无需添加额外的一列来表示复选框,而是由JS完成,所以正常的表格布局就行了: <table class="table table-bordered table-hov ...

  7. 复选框全选、全不选和反选的效果实现VIEW:1592

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. Bootstrap之表格checkbox复选框全选 [转]

    转自: http://blog.csdn.net/shangmingchao/article/details/49761315 效果图: HTML中无需添加额外的一列来表示复选框,而是由JS完成,所以 ...

  9. html+css+js实现复选框全选与反选

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 实例甜点 Unreal Engine 4迷你教程(2)之用C++改变Image小部件的颜色

    完成本迷你教程之前,请前往完成以下迷你教程: ·实例甜点 Unreal Engine 4迷你教程之如何用C++将纹理绘制在UserWidget的Image小部件上: 目标:实现UMG中的此功能: 在上 ...

  2. jQueryUI Sortable 应用Demo

    最近工作用需要设计一个自由布局的页面设计.我选了jQuery UI 的 sortable ,可以拖拽,自由排序 使用很方便,写一个demo,做个记录. 第一.单项目自由排序 下图效果 代码段: < ...

  3. X11 转发

    SecureCRT只支持字符界面,如果要在终端界面能弹出GUI,需要本地安装X11 server,然后服务器讲X11请求forward到本地,即可. x11 server 可以使用Xming, Xma ...

  4. 虚拟机之 搭建discuz论坛

    1.下载 mkdir /data/www cd !$ wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip 2.解压 ...

  5. ASP.NET MVC 基于表达式的动态查询

    项目源码地址:https://gitee.com/zhengwei804/DynamicCustomSearch

  6. 0k6410定时器详细分析

    看到一篇很好的博文,分析2410定时器中断的使用的,很详细,和大家分享一下 转载来源于http://www.cnblogs.com/Neddy/archive/2011/07/01/2095176.h ...

  7. elasticsearch2.x线程池配置

    一个Elasticsearch节点会有多个线程池,但重要的是下面四个: 索引(index):主要是索引数据和删除数据操作(默认是cached类型) 搜索(search):主要是获取,统计和搜索操作(默 ...

  8. 前端性能分析:分析百度和sogou

    先用httpwatch录制这两个网站:www.baidu.com  www.sogou.com 由上图可以看到: 百度用时0.278s 发送7831B 接收36620B 13个请求 搜狗       ...

  9. Suse系统磁盘文件损坏恢复

    进入救援(failSafe)模式检测问题,发现是因为/dev/sda4分区出现文件系统损坏.   /dev/sda4: UNEXPECTED INCONSISTENCY: run fsck manua ...

  10. SqlServer——神奇代码1之Update

    说明:一个带有update的循环的代码.很简单,但是在QQ群里问了,应该说是很少有人注意这个问题,也就是很少有人真的理解SQL中的Update. 代码如下: if object_id('tempdb. ...