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ß
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
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.
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.