2015-01-19 3 views
0

У меня есть ComboBox, который я заполняю объектами для выбора. У меня есть класс LifeCycleObject с несколькими свойствами, один из которых - Name, а один - TypeID. Я пытаюсь добавить свойство Имя в ComboBox, где TypeID = 4 или 5.Добавить значение свойства объекта в combobox с помощью linq

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

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

Который работает, но он добавляет тип объекта из EMS.Action.Entities.LifeCycleObject, я не могу выбрать правильный один из combobox, где каждый элемент одинаков, поэтому как добавить имя LifeCycleObject.Name вместо имени класса.

+1

это WinForms или WPF? –

+0

Или WebForms? :) –

+0

Переопределить 'ToString()' для 'LifeCycleObject'? – Sjips

ответ

3

Вы ищете DisplayMember собственности и Binding:

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

Таким образом, имена ваших объектов будут отображаться в ComboBox. И свойство SelectedValue будет удерживать выбранный объект. Обратите внимание, что для того, чтобы эта работа Name должна быть публичной собственностью в вашем классе, а не поле.

+0

спасибо, мне не было известно о свойствах отображения элементов comboboxes – DidIReallyWriteThat

0

Нет ничего плохого в том, что вы делаете. Вы добавляете список LifeCycleObject s, который вы хотите выбрать из своего списка. Теперь причиной путаницы является тот факт, что поле со списком не знает, как отображать объекты, поэтому оно просто вызывает ToString на объектах. Но вы, вероятно, не перезаписали метод, поэтому он просто скажет вам, что называется объектом.

Таким образом, одним из способов было бы переписать метод ToString, чтобы он возвращал значение свойства Name. Однако более элегантный способ заключается в том, чтобы сообщить в поле со списком, как он должен отображать эти объекты. Как это работает, зависит от того, какой у вас есть поле со списком: с помощью WPF вы можете установить свойство DisplayMemberPath. С WinForms вам необходимо установить свойство DisplayMember.

Смежные вопросы