绑定到Winforms Listbox或DevExpress ListBoxControl(SelectionMode=
本文关键字:ListBoxControl SelectionMode DevExpress Winforms Listbox 绑定 | 更新日期: 2023-09-27 18:28:48
我有一个类,它包含各种属性和相关对象的列表。我正在制作一个表格来输入/编辑类的实例。我正在将对象(类实例)的属性数据绑定到输入/编辑表单的控件
一切都很好,只是我找不到将相关对象列表绑定到列表框的方法(选择了SelectionMode MultiExtended)。Listbox控件应包含所有可能的值,并选择相关对象列表中的这些值。
例如
比方说我有一节课"客户端";其具有相关对象";"产品";(这将是这个特定客户从我这里购买的产品列表)当我编辑表单中的客户端记录时,我需要listbox(或devexpress listboxcontrol)"产品";包含我可以提供的所有产品,并且只选择该客户正在购买的产品。
如何使用数据绑定完成此任务?
附言:我发现了一个老话题,那就是无法通过多选绑定到列表框。。。还是不可能吗?也许你可以建议采取不同的做法?
多选WinForms列表框上的双向绑定?
DevEx ListBoxControl
的SelectedItems
属性是只读的,因此您无法将集合绑定到它。因此,简短的答案是否,在这种情况下仍然无法使用数据绑定。您仍然可以对所有产品的列表进行数据绑定以填充ListBoxControl
,但因为您使用的是多选,并且由于您不能对所选项目进行数据绑定,我建议您不要这样做。
相反,对于这个列表框,我会完全不绑定数据。例如填充控件:
// populate the listbox with a list of all Products
// allProducts is an IEnumerable<Product> where Product has a Description property
listBoxControl1.Items.AddRange(allProducts.Select(x => x.Description).ToArray());
然后,在客户端类中进行选择:
// "client" is type Client which contains a collection of selected Products
foreach (var product in client.Products)
{
var idx = listBoxControl1.FindStringExact(product.Description);
listBoxControl1.SetSelected(idx, true);
}
然后,当需要保存时,清除Client对象中的Products集合,然后使用ListBoxControl.SelectedItems
属性重新填充它。