【问题标题】:Trying to Bind List<T> to CheckedListBox in WinForms c#尝试在 WinForms c# 中将 List<T> 绑定到 CheckedListBox
【发布时间】:2011-10-19 10:04:03
【问题描述】:

我正在使用 WinForms C# 有没有办法获得以下行为:

  1. 将列表绑定到 CheckedListBox
  2. 当我将元素添加到列表 CheckedList 框时
  3. 当我更改 CheckedListBox 时,列表会发生变化

我尝试执行以下操作:

构造函数代码:

checkedlistBox1.DataSource = a;
checkedlistBox1.DisplayMember = "Name";
checkedlistBox1.ValueMember = "Name";

字段:

List&lt;Binder&gt; a = new List&lt;Binder&gt; { new Binder { Name = "A" } };

在按钮 1 上单击:

private void butto1_Click(object sender, EventArgs e)
{
    a.Add(new Binder{Name = "B"});
    checkedListBox1.Invalidate();
    checkedListBox1.Update();
}

但是视图没有更新。

谢谢。

【问题讨论】:

  • 列表框是否足够大以包含新的复选框?

标签: c# winforms visual-studio-2010 data-binding


【解决方案1】:

改变这一行:

List<Binder> a = new List<Binder> { new Binder { Name = "A" } };

到这里:

BindingList<Binder> a = new BindingList<Binder> { new Binder { Name = "A" } };

无需任何其他更改即可正常工作。

关键是BindingList&lt;T&gt;实现了IBindingList,当列表发生变化时会通知控件。这允许 CheckedListBox 控件更新其状态。这是双向数据绑定。

另外,您可以更改这两行:

checkedListBox1.Invalidate();
checkedListBox1.Update();

对此(更具可读性并且本质上做同样的事情):

checkedListBox1.Refresh();

【讨论】:

    【解决方案2】:

    您可能希望查看两件事:

    1. 使用BindingList
    2. BindableAttribute 添加到您的Name 属性

    【讨论】:

    • 制作一个 'a' BindingList ? 'a' 上的 BindableAttribute?
    • @Sergey Kucher - antisanity 为您提供了两个链接。如果您不确定它们的含义,链接中有一个全面的代码示例。
    【解决方案3】:

    您的List&lt;Bender&gt; 是否需要成为某种可观察的集合,例如ObservableCollection&lt;Bender&gt;

    【讨论】:

    • 可能是,你能给我一些代码示例来说明你的意思
    【解决方案4】:

    绑定选中列表框的正确方法是:

    List<YourType> data = new List<YourType>();
    checkedListBox1.DataSource = new BindingList<YourType>(data);
    checkedListBox1.DisplayMember = nameof(YourType.Name);
    checkedListBox1.ValueMember = nameof(YourType.ID);
    

    给自己的注意。

    我每次绑定时遇到的问题是 DataSourceDisplayMemberValueMember 属性智能感知不建议 我很困惑。

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2014-08-29
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 2016-04-18
      • 2013-05-17
      • 1970-01-01
      相关资源
      最近更新 更多