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

时间:2015-01-19 21:43:44

标签: c# linq

我有一个ComboBox,我正在填充要选择的对象。我有一个带有一些属性的LifeCycleObject类,其中一个是Name,一个是TypeID。我试图将Name属性添加到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,我无法从组合框中选择正确的一个,其中每个项目是相同的,所以如何添加LifeCycleObject.Name而不是类名。

2 个答案:

答案 0 :(得分:3)

您正在寻找DisplayMember属性和Binding

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

这样,对象的名称将显示在ComboBox中。 SelectedValue属性将保留所选对象。请注意,为了使此工作Name应该是您的类中的公共属性而不是字段。

答案 1 :(得分:0)

你做的事情没有错。您要在组合框中添加要从中选择的LifeCycleObject列表。现在造成混淆的原因是组合框不知道如何显示对象,所以它只是在对象上调用ToString。但是您可能没有覆盖该方法,因此它只会告诉您对象的调用内容。

因此,一种方法是覆盖ToString方法,以便返回Name属性的值。然而,更优雅的方式是告诉组合框它应该如何显示这些对象。如何工作取决于你有什么样的组合框:使用WPF,你可以设置DisplayMemberPath属性。使用WinForms,您需要设置DisplayMember属性。