Laden...

DataBinding aktualisieren

Erstellt von syn87 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.535 Views
S
syn87 Themenstarter:in
87 Beiträge seit 2008
vor 15 Jahren
DataBinding aktualisieren

Hi Leute,

seit kurzem nervt mich eine kleine Eigenheit des DataBindings. Angenommen ich habe eine ComboBox. Der ausgewählte Text ist an die Eigenschaft eines Objektes gebunden. Soweit funktioniert alles korrekt. Jedoch habe ich im MDI Parent ein KeyPreview für Strg+S eingerichtet, die die save() Prozedur vom jeweiligen Child aufrufen soll. Durch diese Vorgehensweise verlasse ich die ComboBox. Jedoch wird der Text vom DataBinding nicht mit der Anzeige synchronisiert. Die Anzeige hat beinhaltet nämlich das ausgewählte Element. Im Objekt steht etwas vollkommen anderes.

Jemand eine Idee?

Gruß

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo syn87,

so ganz habe ich dein Problem nicht verstanden, aber Aktualisierungsproblem bei DataBindung lassen sich normalerweise durch das Implementieren von INotifyPropertyChanged und/oder IBindingList in den Griff bekommen.

herbivore

S
syn87 Themenstarter:in
87 Beiträge seit 2008
vor 15 Jahren

Eine Eigenschaft wird an den Text einer Textbox gebunden. Die Eigenschaft wird allerdings erst beim Verlassen der Textbox gesetzt. Jedenfalls habe ich dieses Verhalten beobachtet, nachdem ich einen Thread gestartet habe, der mir alle 5 Sekunden das Objekt in der Console anzeigt.

Dieses "Verlassen des Textfeldes" wird in einem Fall nicht getriggert. Nämlich wenn ich in dem Textfeld bin und Strg+S drücke (für diese Tastenkombination ist eine Aktion im MDI Fenster vereinbart). Falls dieser Eventhandler Relevanz enthaelt (was ich nicht glaube), hier einmal kurz aus dem Kopf ein bisschen Pseudocode dazu:


Key_Down {
  if (KeyData == Strg + S && activeMDIChild is saveable) {
    // Saveable ist ein Interface mit der Funktion save()
    if (MessageBox("Daten sichern?").ShowDialog() == DialogResult.Yes)
        ((Saveable)activeMDIChild).save();
  }
}

Ich hoffe die Sache ist jetzt etwas klarer.

Danke im Voraus.

5.299 Beiträge seit 2008
vor 15 Jahren

Hi!

Vermutlich ist das Binding-Objekt, daß deine Textbox bindet, mit

System.Windows.Forms.DataSourceUpdateMode.OnValidation 

eingerichtet. Das ist i.a. auch ganz sinnvoll.
Evtl. musste vorm Speichern

System.Windows.Forms.Binding.ReadValue

oder

System.Windows.Forms.Binding.WriteValue

aufrufen
(ich verwechsel die immer)

Der frühe Apfel fängt den Wurm.