gpt4 book ai didi

c# - CheckedListBox 数据绑定(bind)到项目的选中状态

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:56 24 4
gpt4 key购买 nike

我尝试像这样设置 CheckedListBox 的数据源:

private void Form1_Load(object sender, EventArgs e)
{
checkedListBox1.DisplayMember = "Name";
checkedListBox1.ValueMember = "Checked";
_bindingList = new BindingList<CustomBindingClass>(
new List<CustomBindingClass>
{
new CustomBindingClass {Checked = CheckState.Checked, Name = "Item1"},
new CustomBindingClass {Checked = CheckState.Checked, Name = "Item2"},
new CustomBindingClass {Checked = CheckState.Unchecked, Name = "Item3"},
});
checkedListBox1.DataSource = _bindingList;
}

它正在工作,但只是部分工作。我可以稍后再做休闲

_bindingList.RemoveAt(0);

_bindingList[0].Name = "TestTest"; 和 CheckedListBox 更新良好,但项目未被选中。这是行不通的

_bindingList[0].Checked=CheckState.Checked;

Checked 我的 CustomBindingClass 的属性是 bool 类型时,我也测试过这样做,但也不起作用。有什么建议 ValueMember 属性的类型吗?

最佳答案

考虑这些事实:

  1. CheckedListBox 没有用于检查项目的内置数据绑定(bind)支持。您需要自己处理项目的检查状态。

  2. 您设置了 checkedListBox1.ValueMember = "Checked";。您没有设置项目检查状态,您只是说当您选择项目时, SelectedValue 返回的值来自对象的 Checked 属性,该属性位于 sected 后面元素。例如,您可以在 ButtonClick 事件中使用此代码来查看结果;无论项目的检查状态如何,消息框都将显示项目后面对象的 Checked 属性的值:

    MessageBox.Show(checkedListBox1.SelectedValue.ToString());
  3. 选择项目和检查项目是完全不同的。

为此,我更喜欢使用 DataGridView。您可以简单地拥有一个 CheckBox 列和一个只读的 TextBox 列,并将 DataGridView 绑定(bind)到您的对象列表。

如果需要双向数据绑定(bind),需要实现INotifyPropertyChanged界面,无论您使用什么控件来显示数据。如果您不实现该接口(interface),则在更改模型的属性时 ListChange 事件将不会引发,并且您无法自动看到 UI 中的更改。

关于c# - CheckedListBox 数据绑定(bind)到项目的选中状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39075755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com