如何方便的让你的集合引发改变事件
我创建一个名字叫HeaderCollection的类,派生于System.System.Collections.ObjectModel.Collection<ColumnHeader>。利用.Net已经声明的CollectionChangeEventHandler委托来声明一个事件,如下:
Object sender,
CollectionChangeEventArgs e
)
CollecionChangeEventArgs的构造函数需要两个参数,一个枚举类型CollectionChangeAction,用它来指出发生了什么变化,包含添加,删除,整个集合发生变化三种动作,第二个参数传递发生变化的元素。
接下来我们重载Collection<T>的几个方法:InsertItem,ClearItems,RemoveItem在这些方法里触发事件,下边是这个类的完整描述:
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Collections.ObjectModel;
using System.ComponentModel;
namespace CPI.DataProcess.Forms
{
[Serializable]
public class HeaderCollection:Collection<ColumnHeader>
{
public event CollectionChangeEventHandler ItemChanged;
public HeaderCollection()
{
}
protected override void InsertItem(int index, ColumnHeader item)
{
base.InsertItem(index, item);
ItemChanged(this,new CollectionChangeEventArgs(CollectionChangeAction.Add,item));
}
protected override void ClearItems()
{
base.ClearItems();
ItemChanged(this, new CollectionChangeEventArgs(CollectionChangeAction.Refresh, null));
}
protected override void RemoveItem(int index)
{
base.RemoveItem(index);
ItemChanged(this, new CollectionChangeEventArgs(CollectionChangeAction.Remove, this[index]));
}
protected override void SetItem(int index, ColumnHeader item)
{
base.SetItem(index, item);
ItemChanged(this, new CollectionChangeEventArgs(CollectionChangeAction.Refresh, null));
}
private void OnItemPropertyChanged(Object sender)
{
ItemChanged(sender,null);
}
}
}
这样我们的Collection就暴露出一个改变事件,在使用它的地方给它添加委托就可以了,例如:
{
Invalidate();
}
private HeaderCollection _Headers =new HeaderCollection();
Headers.ItemChanged+=new CollectionChangeEventHandler(OnCollectionPropertyChanged);
当集合属性发生变化时就会触发事件通知自定义控件重绘。
如何方便的让你的集合引发改变事件相关推荐
- 【EventBus】事件通信框架 ( 订阅类-订阅方法缓存集合 | 事件类型-订阅者集合 | 订阅对象-事件类型集合 )
文章目录 前言 一.订阅类-订阅方法缓存集合 二.事件类型-订阅者集合 三.订阅对象-事件类型集合 前言 首先声明几个数据结构 , 参考 [EventBus]EventBus 源码解析 ( 注册订阅者 ...
- 无法找到来自源 Netwtw10 的事件 ID 6062 的描述本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。
电脑启动时意外黑屏无响应,强制关机重启后查看黑屏时的最后一条系统日志: 描述: 无法找到来自源 Netwtw10 的事件 ID 6062 的描述.本地计算机上未安装引发此事件的组件,或者安装已损坏.可 ...
- 邮件安全引发的事件引人深思
邮件安全引发的事件引人深思 在各界都在努力加强网络安全防护之际,我们使用了40多年的电子邮件系统,却已经成为安全链最弱的一环. 现代互联网大部分应用都离不开电子邮件,企业内外部沟通.政府部门内外部沟通 ...
- android列表集合点击事件,给ListeView列表中的每一个Item添加点击事件
首先声明本文主要是在ArrayAdapter.SimpleAdapter中对ListView的每一项进行点击事件! 先看下运行结果 第一步:在xml布局中写一个ListView android:lay ...
- Ajax请求返回200 OK,但是会引发错误事件而不是成功
我已经在我的网站上实现了Ajax请求,并且正在从网页调用端点. 它总是返回200 OK ,但是jQuery执行error事件. 我尝试了很多事情,但无法弄清问题所在. 我在下面添加我的代码: jQue ...
- 猪肉价格暴涨引发的事件
说:"保证老百姓吃得上猪肉." 猪肉价格接着涨 南方都市报报道:深圳市政府承认深圳存在炒猪肉团,规模甚至超过炒房团. 猪肉价格接着涨 网友评选新四座大山:高房价.高学费.高医疗费. ...
- 【jquery版.net控件—dropdownlist】附源码,欢迎大家指点、指正、拍砖!!!
前言 为了2012第一个春天,为了我那卑微的工资,为了我那伟大的爱情............................ 其实是为了自我能力的提升罢了,呵呵!!!(也是为了涨工资吧...) 小弟准 ...
- sikuli官网自动汉化文档
这些信息是以前版本x - 1.0 rc3 Sikuli脚本 在下载页面从菜单中你得到新版本信息sikulix - 1.0(2013年5月) 窗户 只有32位版本提供.但是这个版本应该运行在32位和 ...
- C#中的集合、哈希表、泛型集合、字典
集合ArrayList 集合:集合可以看做是数组,可以将其看成"长度可变,具有很多方法的数组".使用ArrayList,首先需要导入命名空间using.system.collect ...
最新文章
- Linux centos下项目环境搭建及版本部署
- SSIS教程SQlServer2008R2 (5) 添加错误流重定向
- c++中this指针基本概念和使用
- 小程序[渲染层网络层错误] failed to load image_游戏中水的渲染技术
- 通过哪吒动漫豆瓣影评,带你分析python爬虫与BeautifulSoup快速入门
- Python数据科学库-小测验
- Redis教程:主从复制
- Q91:真实地模拟透明材质(Realistic Transparency)(3)——A Glass of Water
- sql 查询字段是中文/英文/数字 正则表达式
- vi编辑器常用命令大全
- SketchUp-2022版本
- 拉丁字母表及中英文发音
- 使用 vimdiff 比较文件的技巧
- 霸榜知乎,谴责豆瓣,数据分析告诉你《流浪地球》到底好看么?
- 英语单词----分类记
- 计算机黑屏故障的原因及解决方法,电脑黑屏原因及解决方法
- CMMI-决策分析与解决(DAR)
- pixel2style2pixel(pSp)实现解读【一】 -- 理论层面
- 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
- 网络框架Volley
热门文章
- 命令行进入指定目录_VIM学习笔记 操作目录(Manipulate Directory)
- Linux进程间通信方式--本地socket
- 【电路原理】学习笔记(0):电路与电路模型
- Linux下的I/O复用与epoll详解(ET与LT)
- 【Leetcode | 52】257. 二叉树的所有路径
- access、strtol函数的使用(后者为C库函数)
- 如何对接oracle 建立pdb
- More DETAILS! PBR的下一个发展在哪里?
- 关于tomcat内路径跳转的一些思考
- Android开发删除短信