【问题标题】:CheckedListBox checked list item property binding to field in a classCheckedListBox 选中列表项属性绑定到类中的字段
【发布时间】:2014-05-30 16:14:47
【问题描述】:

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

【问题讨论】:

    标签: c# winforms data-binding


    【解决方案1】:

    CheckedListBox 控件并不真正支持 DataSource,这就是设计人员将其隐藏在 Intellisense 中的原因。您可以使用它,但列表框的复选标记属性不适用于您的类,即使您将 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);
    };
    

    【讨论】:

    • 谢谢!成功了!
    【解决方案2】:
    checkedlistbox.ValueMember = "IsChecked";  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      相关资源
      最近更新 更多