C# 将组合框数据绑定到空列表<;CustomObject>;
我有一个表单,它有两个组合框。我想使用第二个(子)组合框根据用户从第一个组合框中选择的项目显示子对象列表 实例化表单时,我将两个控件数据绑定到私有列表,如下所示:C# 将组合框数据绑定到空列表<;CustomObject>;,c#,winforms,data-binding,C#,Winforms,Data Binding,我有一个表单,它有两个组合框。我想使用第二个(子)组合框根据用户从第一个组合框中选择的项目显示子对象列表 实例化表单时,我将两个控件数据绑定到私有列表,如下所示: private List<ParentWidget> _parentList; private List<ChildWidget> _childList; public FormExample() { InitializeComponent(); _parentList = GetParen
private List<ParentWidget> _parentList;
private List<ChildWidget> _childList;
public FormExample()
{
InitializeComponent();
_parentList = GetParentWidgets();
_childList = new List<ChildWidget>();
cmbParent.DisplayMember = "WidgetName";
cmbParent.ValueMember = "ID";
cmbParent.DataSource = _parentList;
cmbChild.DisplayMember = "WidgetName";
cmbChild.ValueMember = "ID";
cmbChild.DataSource = _childList;
}
private List\u parentList;
私人名单(childList);;
public FormExample()
{
初始化组件();
_parentList=GetParentWidgets();
_childList=新列表();
cmbParent.DisplayMember=“WidgetName”;
cmbParent.ValueMember=“ID”;
cmbParent.DataSource=\u parentList;
cmbChild.DisplayMember=“WidgetName”;
cmbChild.ValueMember=“ID”;
cmbChild.DataSource=\u childList;
}
当所选父索引发生更改时,我将使用适当的对象填充\u childList
问题是子组合框从不显示集合中的任何对象。如果我在数据绑定之前用至少一个ChildWidget填充集合,它就会工作,但我希望它开始为空
如果我从中正确理解,这是失败的,因为空列表不包含任何要绑定的属性。然而,我绑定到一个特定的类(小部件),而不是一个通用对象。这还不足以进行数据绑定吗?我要做的是监听父组合框的valueChanged事件,当事件触发时,我会在子组合框上进行数据绑定
cmbParent.SelectedValueChanged += OnParentSelectedValueChanged;
private void OnParentSelectedValueChanged(object sender, EventArgs e)
{
this.UpdateChildList(); // Update the data depending on the value in the parent combo
cmbChild.DisplayMember = "WidgetName"; // I guess you can still do this in the constructor
cmbChild.ValueMember = "ID"; // I guess you can still do this in the constructor
cmbChild.DataSource = _childList;
}
使用绑定时,最好使用
BindingList
,问题是List
不支持通知更改,因此当数据更改时,控件不知道并相应更新。您可以这样使用绑定列表
:
private BindingList<ParentWidget> _parentList;
private BindingList<ChildWidget> _childList;
_parentList = new BindingList<ParentWidget>(GetParentWidgets());
通过将组合框绑定到BindingSource并将BindingSource的数据源设置为原始列表,可以实现相同的行为吗?@JYelton我认为
BindingSource
可以,但是您必须向BindingSource
本身添加新项,而不是列表
,使用绑定列表
还需要将项目添加到绑定列表
而不是列表