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实例验证项目的选中状态。

checklistbox复选列表项属性绑定到类中的字段

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";