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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist, wie die Datenbindung funktioniert, werden die Daten verschoben, von der das Steuerelement an die Eigenschaft bei der Validierung tritt auf, und die Validierung tritt auf, wenn das Steuerelement den Fokus verliert.
Weiß ich nicht. Habe ich eine einfache form (Visual C# Express 2008 verwenden .Net 3.5 SP1), und klebte Ihren code so ziemlich wörtlich, und es funktioniert wie erwartet: er zeigt die neue Stadt in der combo-box.
Wenn Sie hinzufügen comboBoxCities.Focus (); am Ende der buttonAddCity_Click (), stellen Sie sicher, dass die neue Stadt gedrängt in _person.BirthCity früher eher als auf ValidateChildren ().