Como você está se referindo a uma caixa de combinação, estou assumindo que você não deseja usar a ligação de dados bidirecional (em caso afirmativo, observe o uso de um 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") };
var bindingSource1 = new BindingSource();
bindingSource1.DataSource = countries;
comboBox1.DataSource = bindingSource1.DataSource;
comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";
Para encontrar o país selecionado no combobox ligado, você faria algo como: Country country = (Country)comboBox1.SelectedItem;
.
Se você deseja que o ComboBox seja atualizado dinamicamente, você precisará certificar-se de que a estrutura de dados que você configurou como o DataSource
implementa IBindingList
; uma dessas estruturas é BindingList<T>
.
Dica: certifique-se de que você está associando o DisplayMember
a uma propriedade na classe e não a um campo público. Se sua classe usa public string Name { get; set; }
, vai funcionar, mas se usar public string Name;
, não será capaz de acessar o valor e, em vez disso, exibirá o tipo de objeto para cada linha na caixa de combinação.