Поскольку вы имеете в виду комбинированный список, я предполагаю, что вы не хотите использовать двухстороннюю привязку данных (если так, посмотрите на использование BindingList
)
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";
Чтобы найти страну, выбранную в поле со списком, вы должны сделать что-то вроде: Country country = (Country)comboBox1.SelectedItem;
.
Если вы хотите, чтобы ComboBox динамически обновлялся, вам необходимо убедиться, что структура данных, заданная вами как DataSource
, реализует IBindingList
; одна такая структура BindingList<T>
.
Совет: убедитесь, что вы привязываете DisplayMember
к свойству класса, а не к открытому полю. Если ваш класс использует public string Name { get; set; }
, он будет работать, но если он использует public string Name;
, он не сможет получить доступ к значению и вместо этого отобразит тип объекта для каждой строки в поле со списком.