试图在WinForms c#中将List <T>绑定到CheckedListBox

Ser*_*her 3 c# data-binding visual-studio-2010 winforms

我正在使用WinForms C#有什么方法可以获得以下行为:

  1. 将List绑定到CheckedListBox
  2. 当我添加元素列表CheckedList框refereshes
  3. 当我更改CheckedListBox时,列表会更改

我试着做以下事情:

构造函数代码:

checkedlistBox1.DataSource = a;
checkedlistBox1.DisplayMember = "Name";
checkedlistBox1.ValueMember = "Name";
Run Code Online (Sandbox Code Playgroud)

领域:

List<Binder> a = new List<Binder> { new Binder { Name = "A" } };

在按钮1上单击:

private void butto1_Click(object sender, EventArgs e)
{
    a.Add(new Binder{Name = "B"});
    checkedListBox1.Invalidate();
    checkedListBox1.Update();
}
Run Code Online (Sandbox Code Playgroud)

但视图不会更新.

谢谢.

Jas*_*own 7

改变这一行:

List<Binder> a = new List<Binder> { new Binder { Name = "A" } };
Run Code Online (Sandbox Code Playgroud)

对此:

BindingList<Binder> a = new BindingList<Binder> { new Binder { Name = "A" } };
Run Code Online (Sandbox Code Playgroud)

它将在没有任何其他变化的情况下工作.

关键是BindingList<T>implements IBindingList,它将在列表更改时通知控件.这允许CheckedListBox控件更新其状态.这是双向数据绑定.

此外,您可以更改这两行:

checkedListBox1.Invalidate();
checkedListBox1.Update();
Run Code Online (Sandbox Code Playgroud)

对此(更可读,基本上做同样的事情):

checkedListBox1.Refresh();
Run Code Online (Sandbox Code Playgroud)