CheckedListBox检查列表项属性绑定到类中的字段

时间:2014-05-30 16:14:48

标签: c# winforms data-binding

我有一个包含两个属性的类,我想将它绑定到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实例验证项目的检查状态。

2 个答案:

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