绑定到Winforms Listbox或DevExpress ListBoxControl(SelectionMode = MultiExtended)

时间:2013-08-24 11:38:38

标签: c# winforms data-binding listbox devexpress

我有一个类,它包含各种属性和相关对象列表。 我正在制作一个表单来输入/编辑类的实例。我将对象(类实例)的属性数据绑定到输入/编辑表单的控件。

除了我找不到将相关对象列表绑定到列表框(选择SelectionMode MultiExtended)的方法之外,一切正常。列表框控件应包含所有可能的值,并选择相关对象列表中的那些值。

例如

假设我有一个“客户”类,其中包含相关对象“产品”(这将是此特定客户从我这里购买的产品列表) 当我在表单中编辑客户记录时,我需要列表框(或devexpress listboxcontrol)“产品”包含我可以提供的所有产品,并且仅选择客户购买的那些产品。

如何使用数据绑定完成此任务?

P.S。我找到了一个老话题,用多选择绑定到列表框是不可能的...它仍然不可能吗?也许你可以建议以不同的方式做到这一点?

Two Way Binding on Multi-select WinForms Listbox?

1 个答案:

答案 0 :(得分:1)

DevEx SelectedItems的{​​{1}}属性是只读的,因此您无法将集合绑定到它。所以,简短的回答是不,你仍然无法在这种情况下使用数据绑定。您仍然可以绑定所有产品列表的数据以填充ListBoxControl,但由于您使用的是多个选择,并且因为您无法对所选项目进行数据绑定,我建议不要使用它。

相反,只是对于这个列表框,我会完全没有数据绑定。例如,填充您的控件:

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对象中的Products集合,然后使用// "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); } 属性重新填充它。