使用 linq 将对象 属性 值添加到组合框

Add object property value to combobox using linq

我有一个 ComboBox,我正在向 select 填充对象。我有一个带有一些属性的 LifeCycleObject class,其中一个是 Name,一个是 TypeID。我正在尝试将名称 属性 添加到 TypeID = 4 或 5.

的 ComboBox
Linq Query
  _lcObjects = new List<LifeCycleObject>();      

  cbStep.Items.AddRange(_lcObjects.FindAll(
                                       x => x.TypeID == 5 || x.TypeID == 4
                                             ).ToArray());

这行得通,但它添加了 EMS.Action.Entities.LifeCycleObject 的对象类型,我无法 select 来自每个项目都相同的组合框的正确对象,所以如何添加 LifeCycleObject.Name 而不是 Class 名称。

您正在寻找 DisplayMember 属性 和 Binding:

cbStep.DisplayMember = "Name"; 
cbStep.DataSource = _lcObjects.FindAll(x => x.TypeID == 5 || x.TypeID == 4);

这样您的对象的名称将显示在 ComboBox 中。 SelectedValue 属性 将保存选定的 object.Note,为了使这项工作 Name 应该是 public 属性 在你的 class 不是字段。

你所做的没有错。您正在添加一个 LifeCycleObject 的列表,您希望从您的组合框中 select。现在造成混乱的原因是组合框不知道如何显示对象,所以它只是在对象上调用 ToString。但是你可能没有覆盖这个方法,所以它只会告诉你这个对象叫什么。

因此,一种方法是覆盖 ToString 方法,使其 returns Name 属性 的值。然而,更优雅的方法是告诉组合框它应该如何显示这些对象。它的工作原理取决于您拥有哪种组合框:使用 WPF,您可以设置 DisplayMemberPath property. With WinForms, you need to set the DisplayMember 属性.