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/ ...
随机推荐
- python开发socket套接字:粘包问题&udp套接字&socketserver
一,发生粘包 服务器端 from socket import * phone=socket(AF_INET,SOCK_STREAM) #套接字 phone.setsockopt(SOL_SOCKET, ...
- 微信小程序之本地缓存
目前,微信给每个小程序提供了10M的本地缓存空间(哎哟妈呀好大) 有了本地缓存,你的小程序可以做到: 离线应用(已测试在无网络的情况下,可以操作缓存数据) 流畅的用户体验 减少网络请求,节省服务器资源 ...
- MongoDB在Java下的增删查改
我们总不能一直使用cmd对数据库操作,数据库总是要在程序中使用的.今天来说一下怎么通过Java调用MongoDB. 学习一下最基本也是最常用的增删查改语句,这是使用数据库的基础. 注意事项: 1.要打 ...
- Bootstrap 简介(Web前端CSS框架)
目录1.简介2.特点3.组件4.Javascript插件5.定制自己的框架代码6.Bootstrap Less 1.简介Bootstrap是Twitter推出的一个开源的用于前端开发的工具包.它由Tw ...
- window - BOM对象
Window 对象 Window 对象表示浏览器中打开的窗口. 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外 ...
- 如何判定Unity已破解成功
[如何判定Unity已破解成功] 点击菜单“Unity”->"About Unity...".在弹出的关于Unity的信息的对话框中,如果是已破解版本,在右下角会显示序列号.
- solr4.3+tomcat入门部署
solr4.3的入门配置 目前阿帕奇官方仅推荐2个比较稳定的版本一个是4.3的版本,一个3.6的版本 3.6的版本没有用过,所以在此无涉及,下面就来说说solr4.3的入门配置 s ...
- 190. Reverse Bits 二进制相反数
[抄题]: Reverse bits of a given 32 bits unsigned integer. Example: Input: 43261596 Output: 964176192 E ...
- python 输入参数解包,模块导入,接收IO输入参数
#coding=utf-8 from sys import argv script,first,second,third = argv print "the script is=" ...
- Python3.7安装Django
一.系统环境 操作系统:Win7 64位 Python版本:3.7 二.安装参考 Django的下载网址:https://www.djangoproject.com/download/ 当前最新版本: ...