很有意思的一个泛型集合类, 不过由于它属于System.ComponentModel名空间估计很容易被人遗忘.
主要特点在于它可以在加入新的元素或者元素发生修改的时候触发相应的事件, 而在基本集合类中是不具有这些功能的,而且由于在基本集合中Add方法不是Virtual方法,要想让它触发时间还真不是很方便.不过BindingList可以很好的满足你的功能.
下面的示例中使用List界面上不会立即显示新的元素, 而使用BindingList就可以做到界面和List内容的同步.
(BTW 别告诉我,你以为DataBind只能绑定数据库)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace BindingList
{
public partial class Form1 : Form
{
//private IList<int> bl = new List<int>();
private IList<int> bl = new BindingList<int>();
private int count = 0;
public Form1()
{
InitializeComponent();
bl.Add(0);
listBox1.DataSource = bl;
}
private void button1_Click(object sender, EventArgs e)
{
bl.Add(++count);
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Collection has "+bl.Count.ToString()+" Elements");
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace BindingList
{
public partial class Form1 : Form
{
//private IList<int> bl = new List<int>();
private IList<int> bl = new BindingList<int>();
private int count = 0;
public Form1()
{
InitializeComponent();
bl.Add(0);
listBox1.DataSource = bl;
}
private void button1_Click(object sender, EventArgs e)
{
bl.Add(++count);
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("Collection has "+bl.Count.ToString()+" Elements");
}
}
}
我这里并没有自己做事件的处理操作, DataBind内部自己做了. 不知道具体实现方法.
BTW reflector可以查看net2.0的dll , 不过默认加载的还是1.0的系统dll. 所以必须将原来默认加载的系统dll全部关闭再打开新的.