我创建一个名字叫HeaderCollection的类,派生于System.System.Collections.ObjectModel.Collection<ColumnHeader>。利用.Net已经声明的CollectionChangeEventHandler委托来声明一个事件,如下:
public delegate void CollectionChangeEventHandler (
Object sender,
CollectionChangeEventArgs e
)
接下来我们重载Collection<T>的几个方法:InsertItem,ClearItems,RemoveItem在这些方法里触发事件,下边是这个类的完整描述:
using System;
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就暴露出一个改变事件,在使用它的地方给它添加委托就可以了,例如:
public void OnCollectionPropertyChanged(Object sender,CollectionChangeEventArgs e)

{
Invalidate();
}
private HeaderCollection _Headers =new HeaderCollection();
Headers.ItemChanged+=new CollectionChangeEventHandler(OnCollectionPropertyChanged);