webentwicklung-frage-antwort-db.com.de

Datenbindung für TextBox

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.

28
Joan Venge

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 DataSourceUpdateModeOnValidation ist. Wenn Sie also nicht OnPropertyChanged angeben, wird das Modellobjekt erst aktualisiert, nachdem Ihre Validierungen stattgefunden haben.

57
Joepro

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 .

1

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.
0
user3838082