Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CheckedListBox数据绑定到项目的选中状态_C#_.net_Winforms_Data Binding_Checkedlistbox - Fatal编程技术网

C# CheckedListBox数据绑定到项目的选中状态

C# CheckedListBox数据绑定到项目的选中状态,c#,.net,winforms,data-binding,checkedlistbox,C#,.net,Winforms,Data Binding,Checkedlistbox,我尝试如下设置CheckedListBox的数据源: private void Form1_Load(object sender, EventArgs e) { checkedListBox1.DisplayMember = "Name"; checkedListBox1.ValueMember = "Checked"; _bindingList = new BindingList<CustomBindingClass>(

我尝试如下设置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[0]。Name=TestTest;和CheckedListBox更新良好,但未选中项目除外。这不起作用

_bindingList[0].Checked=CheckState.Checked;
当CustomBindingClass中的CheckedProperty类型为bool时,我也测试过这样做,但也不起作用。任何关于ValueMember属性类型的建议?

如果您查看CheckedListBox类,您会注意到DataSource、DisplayMember和ValueMember都标记为

[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
这是Windows窗体控件中使用的一种常用技术,用于指示从基类继承的某些公共属性(因此无法删除)不适用于该具体派生类,因此不应使用

对于CheckedListBox的上述属性,必须有这样做的原因。正如你已经看到的,这是一种工作,但问题是它根本不能保证工作。所以不要使用它们。如果愿意,可以创建一个helper类,该类包含CheckedListBox和BindingList,侦听ListChanged事件并同步控件

如果查看CheckedListBox类,您会注意到DataSource、DisplayMember和ValueMember都标记为

[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
这是Windows窗体控件中使用的一种常用技术,用于指示从基类继承的某些公共属性(因此无法删除)不适用于该具体派生类,因此不应使用

对于CheckedListBox的上述属性,必须有这样做的原因。正如你已经看到的,这是一种工作,但问题是它根本不能保证工作。所以不要使用它们。如果愿意,可以创建一个helper类,该类包含CheckedListBox和BindingList,侦听ListChanged事件并同步控件

考虑以下事实:

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

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

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

我更喜欢使用DataGridView来实现这种目的。您可以简单地拥有一个复选框列和一个只读文本框列,并将DataGridView绑定到对象列表

若您需要双向数据绑定,那个么无论您使用什么控件来显示数据,都需要实现接口。如果您未实现该接口,则在更改模型列表上的属性时,将不会引发更改事件,并且您无法自动查看UI中的更改。

请考虑以下事实:

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

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

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

我更喜欢使用DataGridView来实现这种目的。您可以简单地拥有一个复选框列和一个只读文本框列,并将DataGridView绑定到对象列表


若您需要双向数据绑定,那个么无论您使用什么控件来显示数据,都需要实现接口。如果不实现该接口,则在更改模型列表上的属性时,将不会引发更改事件,并且您无法自动查看UI中的更改。

我知道您希望使用数据绑定来选中和取消选中CheckedListBox的项。但不幸的是,它没有内置的数据绑定来检查状态的支持。我知道您希望使用数据绑定来检查和取消选中CheckedListBox的项。但不幸的是,它没有内置的数据绑定支持来检查状态。CustomBindingClass需要实现INotifyPropertyChanged或任何它被称为的东西CustomBindingClass需要实现INotifyPropertyChanged或任何它被称为的东西