我有一个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而不是类名。
答案 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属性。