Mag mir jemand erklären, wo der Sinn bei Live-Bindings liegen, wenn ich denen mittels Notify erst mitteilen muss, dass sich was geändert hat? Dann hab ich doch fast genau so viel Glue-Code wie vorher auch, oder nicht?
Leider wurde das scheinbar nicht konsequent in die
VCL Controls (zu FMX kann ich nicht viel sagen) eingebaut. Einer meiner vielen Kritikpunkte zu den LiveBindings bisher. Theoretisch gibt es über die neue Observer property von TComponent die Möglichkeit, dass, was ich in der extra "Zwischenunit" bei DSharp gemacht habe direkt in den entsprechenden Change methoden der Controls einzubauen. Das scheint auch der Fall zu sein für einige Controls (angeschaut bei TEdit und TCheckBox). Allerdings stimmt dort die Reihenfolge nicht, so dass der Observer feuert, bevor die Property aktualisiert wurde (KeyDown Methode im TCustomEdit z.B.). Außerdem registrieren die TBindingExpression Objekte keine Observer, dies tun nur die TBindLink Objekte (weiterer Kritikpunkt, keine gemeinsame Basisklasse). Diese haben aber noch das Problem, dass das SourceObjekt ein bestimmtes interface (irgendwas mit IEditBindLink oder so) implementieren müssen. Ansonsten bleibt das TEdit einfach ma ReadOnly.
Was mir am LiveBinding überhaupt nicht gefällt ist die Beschränkung auf TComponent. Gibts dazu irgend welche Aussagen? Die Anbinung des eigenen BusinessModel kann man so vergessen.... Da es ja offensichtlich per
RTTI geht, warum wurde das nicht schon viel weiter oben in die
VCL eingehängt?
Bindings arbeiten auch mit TObject. Die Property heißt aber anders (DataObject oder so...) Das fällt nur in der
IDE nicht auf, weil man dort ja nur TComponent Derivate hat. Ich glaube in der Doku gibts ein Beispiel, wie man einfache Objekte über Bindings aneinander heftet.
Generell kann ich mich des Eindrucks nicht erwehren, dass das Hauptziel der LiveBindings das fitmachen von FMX für
DB Geschichten ist. Dann schien jemandem aufgefallen zu sein, dass man da ja noch mehr draus machen kann aber es wurde nicht konsequent und qualitativ hochwertig umgesetzt.