checklistbox复选列表项属性绑定到类中的字段
本文关键字:字段 绑定 属性 列表 checklistbox | 更新日期: 2023-09-27 18:05:52
我有一个具有两个属性的类,我想将它绑定到CheckedListBox项。WebsiteName属性将是DisplayValue, IsChecked应该是该项的Checked状态:
public class ACLASS:
{
public string WebsiteName
{
get;
set;
}
public bool IsChecked
{
get;
set;
}
public ACLASS()
{
}
}
我是这样"尝试"绑定它的:
ACLASS aclass = new ACLASS();
aclass.WebsiteName = "www.example.com";
BindingList<ACLASS> list = new BindingList<ACLASS>();
list.Add(aclass);
checkedlistbox.DataSource = list;
checkedlistbox.DisplayMember = "WebsiteName";
这一切都很好,但我如何也绑定检查状态的项目在CheckedListBox与类的IsChecked属性,所以当我检查一个项目在CheckedListBox它也会改变的IsChecked属性的ACLASS实例?我需要这个,这样我就可以通过ACLASS实例验证项目的选中状态。
CheckedListBox控件并不真正支持数据源,这就是设计者隐藏它不让智能感知的原因。你可以使用它,但是列表框的checkmark属性不能与你的类一起工作,即使你将ValueMember属性设置为你的布尔属性。
不幸的是,这意味着你必须自己设置值:
checkedlistbox.DataSource = list;
checkedlistbox.DisplayMember = "WebsiteName";
for (int i = 0; i < checkedListbox.Items.Count; ++i) {
checkedListbox.SetItemChecked(i, ((ACLASS)checkedListbox.Items[i]).IsChecked);
}
,你也必须自己跟踪更改:
checkedListBox1.ItemCheck += (sender, e) => {
list[e.Index].IsChecked = (e.NewValue != CheckState.Unchecked);
};
checkedlistbox.ValueMember = "IsChecked";