ListBox toBind Dictionary ‹строка, Object›

Есть ли способ привязать словарь к ListBox? например: У меня есть этот класс:

   class Person
    {
        private string _firstName;
        private string _lastName;
        private int _age;

        public Person(string firstName, string lastName, int age)
        {
            this._firstName = firstName;
            this._lastName = lastName;
            this._age = age;
        }

        public string FirstName
        {
            get { return _firstName; }
            set { this._firstName = value; }
        }

        public string LastName
        {
            get { return _lastName; }
            set { this._lastName = value; }
        }

        public int Age
        {
            get { return _age; }
            set { this._age = value; }
        }
    }

и я использую его как значение своего словаря:

private Dictionary<string, Person> _persons = new Dictionary<string, Person>();

и я хочу привязать его к listBox ... но мне нужно выбрать, какой элемент привязать ... например: я хочу привязать человека, тогда весь человек будет отображаться только в DisplayMember списка listBox ...

я пробовал этот ответ: stackoverflow.com/questions/854953/datagridview-bound-to-a-dictionary Криса, но вывод, отображаемый в списке perItem, был примерно таким:

{ Key = key, Value = ObjectValue }

Вопрос: Есть ли другой способ сделать это? или как исправить это, по крайней мере, отредактировать элемент списка?

Обновлено: я недавно видел этот ответ: stackoverflow.com/questions/1506987/how-to-bind-dictionary-to-listbox-in-winforms

и вроде работает! Но теперь моя проблема заключалась в том, что если я хочу отображать данные из значений ... что поместить в listBox.DisplayMember?


person Elegiac    schedule 12.02.2015    source источник
comment
Вы создали DataTemplate для элемента списка itemTempalte и привязали его к своей собственности?   -  person Jamaxack    schedule 12.02.2015
comment
еще не пробовал @Jamaxack   -  person Elegiac    schedule 12.02.2015
comment
это может вам помочь: msdn.microsoft.com/ en-us / library / ms742521 (v = vs.110) .aspx   -  person Jamaxack    schedule 12.02.2015
comment
это возможно на winforms? @Jamaxack ... (извините, я забыл пометить тег, но теперь добавлен)   -  person Elegiac    schedule 12.02.2015
comment
WinForm не имеет DataTempalte, поэтому вы можете пойти, установив yourListName.DisplayMemberPath = Value.FirstName; Если вам нужно, я могу сделать демонстрационный проект на WPF или WInForms. @Elegiac   -  person Jamaxack    schedule 12.02.2015
comment
@scheien, это не дубликат, так как я использую объект в качестве своего значения   -  person Elegiac    schedule 12.02.2015
comment
@Jamaxack, я уже пробовал: Value.Person ... но он продолжает отображать ключ. [SolutionName] .Person ... я также пробовал Value.FirstName, он отображался правильно ... проблема заключалась только в первых данных   -  person Elegiac    schedule 12.02.2015
comment
Что вы имеете в виду под 1-м данными и в чем проблема? @Elegiac   -  person Jamaxack    schedule 12.02.2015
comment
если в моем списке больше 1 данных ... например: list [0] .Value.Firstname = Stack; список [1] ​​.Value.FirstName = Переполнение; ... в списке будет отображаться только 'Стек'   -  person Elegiac    schedule 12.02.2015


Ответы (1)


Невозможно указать что-то вроде «Person.FirstName» в DisplayMember списка в winforms.

Что вы могли бы сделать, так это переопределить метод Person ToString или вместо привязки словаря вы могли бы привязать _4 _...

Или есть класс только для привязки и привязки List<CustomPerson>.

public class CustomPerson
{
    public string Key { get; set; }
    public Person Person { get; set; }
    public string DisplayValue
    {
        get { return Person.FirstName; }
    }
}

Затем установите DisplayMember на DisplayValue.

person BrunoLM    schedule 09.03.2015