Как мне привязать список пользовательских объектов к ComboBox?

#c# #winforms

#c# #winforms

Вопрос:

Как мне привязать список пользовательских объектов к combobox? Это то, что у меня есть в настоящее время:

             this.classCmbo.DataSource = _viewModel.Coarses;
            this.classCmbo.DisplayMember = "Name";
            this.classCmbo.ValueMember = "Id";
  

Я знаю, какое «Имя» должно отображаться, но я хочу, чтобы «Id» было значением, связанным с выбором. Как вы делаете это в winforms?

Вот грубый объект:

  public class Coarse
    {
        public virtual int Id { get; private set; }
        public virtual string Name { get;  set; }
    }
  

Спасибо…

Ответ №1:

вы можете попробовать вот так…..

 public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }
    public Country(string _name)
    {
        Cities = new List<City>();
        Name = _name;
    }
}

List<Country> countries = new List<Country> { new Country("UK"), 
                                     new Country("Australia"), 
                                     new Country("France") };

bindingSource1.DataSource = countries;

comboBox1.DataSource = bindingSource1.DataSource;

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";
  

Я надеюсь, что это поможет вам…

Ответ №2:

Не уверен, что именно у вас есть _viewModel.Coarses , но попробуйте это?

 this.classCmbo.DataSource = _viewModel.Coarses;
this.classCmbo.DisplayMember = _viewModel.Coarses.Name;
this.classCmbo.ValueMember = _viewModel.Coarses.Id;
  

или просто

 this.classCmbo.DataSource = _viewModel.Coarses;
this.classCmbo.DisplayMember = Coarses.Name;
this.classCmbo.ValueMember = Coarses.Id;
  

Комментарии:

1. Спасибо, но _viewModel. Coarse — это коллекция Coarse.. т.Е. IList<Coarse>, следовательно _viewModel. Огрубляет. Название не имеет смысла «Coarses» — это коллекция типа «Coarse»

2. Вы пробовали это как просто Coarses.Name , или, может быть classCmbo.DataSource.Name ? Извините, у меня не было никаких проблем с этим, но я делал это только в WPF, поэтому не уверен, как это переводится обратно в WinForms:(

Ответ №3:

Обычно вы можете использовать ComboBoxItem.Тег для такого рода вещей.

http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.tag.aspx

Комментарии:

1. Спасибо.. Я должен был упомянуть, что это приложение WinForm, а не WPF

2. О, я вижу, я пропустил это, извините D: ComboBoxes в winforms просто используют коллекцию объектов для своих элементов. Они могут быть абсолютно любыми. Текст, отображаемый в выпадающем списке для этого элемента, соответствует тому, что возвращает toString(). Что бы я сделал, так это написал класс со всей необходимой информацией, хранящейся в виде свойств (или используйте ту, которую вы уже написали), и включил свойство Text для того, что вы хотите отобразить в ComboBox. Тогда это просто вопрос переопределения метода toString(), чтобы вернуть содержимое вашего текстового свойства. Затем вы можете добавить его с помощью myComboBox. Товары. Добавить(MyCustomObject);