我正在使用WinForms C# 有没有办法获得以下行为:
我尝试执行以下操作:
构造函数代码:
checkedlistBox1.DataSource = a;
checkedlistBox1.DisplayMember = "Name";
checkedlistBox1.ValueMember = "Name";
字段:
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();
}
但视图不会更新。
谢谢。
答案 0 :(得分:7)
更改此行:
List<Binder> a = new List<Binder> { new Binder { Name = "A" } };
到此:
BindingList<Binder> a = new BindingList<Binder> { new Binder { Name = "A" } };
它将在没有任何其他更改的情况下正常工作。
关键是BindingList<T>
实现IBindingList
,它将在列表更改时通知控件。这允许CheckedListBox控件更新其状态。这是双向数据绑定。
此外,您可以更改这两行:
checkedListBox1.Invalidate();
checkedListBox1.Update();
对此(更具可读性,基本上做同样的事情):
checkedListBox1.Refresh();
答案 1 :(得分:3)
您可能希望看到两件事:
答案 2 :(得分:1)
您的List<Bender>
是否需要成为某种可观察的集合,例如ObservableCollection<Bender>
?
答案 3 :(得分:0)
绑定选中列表框的正确方法是:
List<YourType> data = new List<YourType>();
checkedListBox1.DataSource = new BindingList<YourType>(data);
checkedListBox1.DisplayMember = nameof(YourType.Name);
checkedListBox1.ValueMember = nameof(YourType.ID);
自我提醒。
我每次绑定时遇到的问题是intellisense不建议使用DataSource、DisplayMember和ValueMember属性< /strong> 我很困惑。