【问题标题】:Binding to Winforms Listbox or DevExpress ListBoxControl (SelectionMode=MultiExtended)绑定到 Winforms Listbox 或 DevExpress ListBoxControl (SelectionMode=MultiExtended)
【发布时间】:2013-08-27 09:49:53
【问题描述】:

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

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

例如

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

如何使用数据绑定来完成这项任务?

附:我发现了一个老话题,无法通过多选绑定到列表框......仍然不可能吗?也许您可以建议以不同的方式来做?

Two Way Binding on Multi-select WinForms Listbox?

【问题讨论】:

    标签: c# winforms data-binding listbox devexpress


    【解决方案1】:

    DevEx ListBoxControlSelectedItems 属性是只读的,因此您无法将您的集合绑定到它。所以,简短的回答是不,在这种情况下您仍然不能使用数据绑定。您仍然可以对所有产品的列表进行数据绑定以填充 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 类中进行选择:

    // "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 属性重新填充它。

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 2012-06-15
      • 1970-01-01
      • 2016-04-18
      • 2011-01-31
      • 2013-05-26
      • 2010-12-21
      • 2015-09-01
      • 2011-02-10
      相关资源
      最近更新 更多