我有一个包含两个属性的类,我想将它绑定到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中项目的Checked状态与类的IsChecked属性绑定,因此当我检查CheckedListBox中的项目时,它也将更改ACLASS的IsChecked属性实例?我需要这个,所以我可以通过ACLASS实例验证项目的检查状态。
答案 0 :(得分:6)
CheckedListBox控件并不真正支持DataSource,这就是设计师将其隐藏在Intellisense中的原因。您可以使用它,但即使您将ValueMember属性设置为布尔属性,列表框的checkmark属性也不适用于您的类。
不幸的是,这意味着您必须自己设置值:
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);
};
答案 1 :(得分:0)
checkedlistbox.ValueMember = "IsChecked";