Ich habe eine grundlegende Eigenschaft, die ein Objekt vom Typ Fruit speichert:
Fruit food;
public Fruit Food
{
get {return this.food;}
set
{
this.food= value;
this.RefreshDataBindings();
}
}
public void RefreshDataBindings()
{
this.textBox.DataBindings.Clear();
this.textBox.DataBindings.Add("Text", this.Food, "Name");
}
Also setze ich this.Food
außerhalb des Formulars und dann wird es in der Benutzeroberfläche angezeigt.
Wenn ich this.Food
ändere, wird es korrekt aktualisiert. Wenn ich die Benutzeroberfläche programmgesteuert ändere:
this.textBox.Text = "NewFruit"
, aktualisiert dies nicht.Food.
Warum könnte das sein? Ich habe auch INotifyPropertyChanged
für Fruit.Name implementiert, aber immer noch dasselbe.
Ich empfehle Ihnen, INotifyPropertyChanged zu implementieren und Ihren Datenbindungscode wie folgt zu ändern:
this.textBox.DataBindings.Add("Text",
this.Food,
"Name",
false,
DataSourceUpdateMode.OnPropertyChanged);
Das wird es beheben.
Beachten Sie, dass der Standardwert DataSourceUpdateMode
OnValidation
ist. Wenn Sie also nicht OnPropertyChanged
angeben, wird das Modellobjekt erst aktualisiert, nachdem Ihre Validierungen stattgefunden haben.
Sie benötigen ein Bindungsquellenobjekt, um als Vermittler zu fungieren und die Bindung zu unterstützen. Aktualisieren Sie dann anstelle der Benutzeroberfläche das Unterstreichungsmodell.
var model = (Fruit) bindingSource1.DataSource;
model.FruitType = "oranges";
bindingSource.ResetBindings();
Informieren Sie sich über BindingSource und die einfache Datenbindung für Windows Forms .
Wir können folgenden Code verwenden
textBox1.DataBindings.Add("Text", model, "Name", false, DataSourceUpdateMode.OnPropertyChanged);
Woher
"Text"
- die Eigenschaft des Textfelds model
- Das Modellobjekt gibt hier den Code ein "Name"
- Der Wert des Modells, an den das Textfeld gebunden werden soll.