我想创建一个简单的列表框,它绑定到一个链表。
该列表应该在任何给定时间只能容纳5个项目。
添加新项目时,应检查项目是否计数>= 5
,然后删除最后一项并将新项目添加到顶部。
为此,我制作了这个测试应用程序:
public partial class Form1 : Form
{
LinkedList<string> list01 = new LinkedList<string>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
list01.AddFirst("AAA");
list01.AddFirst("BBB");
list01.AddFirst("CCC");
listBox1.DataSource = new BindingSource(list01, "");
}
private void button1_Click(object sender, EventArgs e)
{
if (list01.Count >= 5)
list01.RemoveLast();
list01.AddFirst(DateTime.Now.ToString());
listBox1.DataSource = new BindingSource(list01, "");
}
}
看来,当我添加新项目时,我必须继续将数据源设置为新的绑定源,以便在U.I上显示添加的项目。
是否可以初始化一个绑定源,当其中的项目发生更改时,无需每次添加新项目时都自动更新列表框而不必设置数据源?
答案 0 :(得分:1)
您需要一个实现集合更改通知的集合。您有两个选项BindingList<T>
和ObservableCollection<T>
。
选择任何一个,从您的评论来看,您似乎只是在寻找AddFirst
和RemoveLast
。您可以自己创建一个扩展方法。
public static class BindingListExtension
{
public static void AddFirst<T>(this BindingList<T> list, T item)
{
list.Insert(0, item);
}
public static void RemoveLast<T>(this BindingList<T> list)
{
list.RemoveAt(list.Count - 1);
}
}
答案 1 :(得分:0)
根据Sriram Sakthivel's
建议,我已达到了我的要求:
public partial class Form1 : Form
{
BindingList<string> list01 = new BindingList<string>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
listBox1.DataSource = list01;
list01.Add("AAA");
list01.Add("BBB");
list01.Add("CCC");
}
private void button1_Click(object sender, EventArgs e)
{
if (list01.Count >= 5)
list01.RemoveAt(4);
list01.Insert(0, DateTime.Now.ToString());
}
}