C# databinding an combobox

Ich nicht verstehen kann, sind die folgenden 2 Fragen da dieser code. Erstellte ich mir eine combobox, um ein benutzerdefiniertes Objekt, und ich will jedes mal, dass Sie den ausgewählten Wert ändern auf das Kombinationsfeld, das benutzerdefinierte Objekt auch geändert.

public partial class MainForm : Form
{
    private Person _person;
    public MainForm()
    {
        InitializeComponent();
        _person = new Person();

        //Populating the combox, we have this.comboBoxCities.DataSource = this.cityBindingSource;
        cityBindingSource.Add(new City("London"));
        cityBindingSource.Add(new City("Paris"));
        _person.BirthCity = new City("Roma");
        cityBindingSource.Add(_person.BirthCity);
        cityBindingSource.Add(new City("Madrid"));

        //Doing the binding
        comboBoxCities.DataBindings.Add("SelectedItem", _person, "BirthCity");
    }

    private void buttonDisplay_Click(object sender, EventArgs e)
    {
        MessageBox.Show("BirthCity=" + _person.BirthCity.Name);
    }

    private int i = 0;
    private void buttonAddCity_Click(object sender, EventArgs e)
    {
        City city = new City("City n°" + i++);
        cityBindingSource.Add(city);
        comboBoxCities.SelectedItem = city;
    }

}

public class Person
{
    private City _birthCity;
    public City BirthCity
    {
        get { return _birthCity; }
        set
        {
            Console.WriteLine("Setting birthcity : " + value.Name);
            _birthCity = value;
        }
    }
}

public class City
{
    public string Name { get; set; }
    public City(string name) { Name = name; }
    public override string ToString() { return Name; }
}

1 - warum, wenn ich manuell wählen zweimal in einer Zeile (oder mehr) unterschiedlichen Wert auf die combobox, ich bekam nur einen Anruf, um BirthCity.Gesetzt, mit dem er zuletzt gewählten Wert (und der Aufruf scheint feuern nur, wenn die combobox verloren den Fokus) ?

2 - warum, wenn ich auf buttonAddCity und dann buttonDisplay, die diese Stadt nicht, der ausgewählt ist (nicht dargestellt in der comobox )

  • Sie überschreiben sollten, GetHashCode() und Equals () - Methoden.
InformationsquelleAutor Toto | 2009-08-25
Schreibe einen Kommentar