使用 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 属性.
我有一个 ComboBox,我正在向 select 填充对象。我有一个带有一些属性的 LifeCycleObject class,其中一个是 Name,一个是 TypeID。我正在尝试将名称 属性 添加到 TypeID = 4 或 5.
的 ComboBoxLinq 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 属性.