Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi [XE2] Live Bindings (https://www.delphipraxis.net/163299-%5Bxe2%5D-live-bindings.html)

mquadrat 23. Sep 2011 15:51

[XE2] Live Bindings
 
Hallo zusammen,

gibt es irgendwo eine halbwegs sinnvolle Dokumentation der Live-Bindings? Die Dokumentation im docwiki von Embarcadero ist - vorsichtig ausgedrückt - arg übersichtlich. Zu TBindList beschränkt sich die Doku auf einen Satz "TBindList and TBindGridList are used to populate a list or grid.". Da wäre ich persönlich nie drauf gekommen. :roll: In sämtlichen Samples (die ich dank docwiki und anschließendem SVN Update des Samples Ordner gefunden habe) wird das immer in Verbindung mit TBindScopeDB genutzt. Da ich nun aber keine Datasets verwende, wollte ich schauen ob ich da nicht auch TBindScope verwenden kann. Die Hilfe hilft nicht wirklich weiter, statt dessen wird statt gar keinem Text lieber mal die Beschreibung von TComponent angezeigt. Bleibt also der Blick in den Source-Code.

Und damit komme ich zur eigentlichen Frage: Hab ich was übersehen oder kann ich via Live-Binding keine TObjectList<T> an VCL-Controls binden?

Union 23. Sep 2011 16:08

AW: [XE2] Live Bindings
 
Schau mal hier und da

mquadrat 23. Sep 2011 16:24

AW: [XE2] Live Bindings
 
Der Post von Stevie (Delphi Sorcery) bezieht sich auf das DSharp-Databinding. Ich versuche mich nur gerade zwischen Live-Bindings (Vorteil: "offiziell", Expression-Engine) und DSharp (Vorteil: näher an dem was ich eigentlich suche) zu entscheiden ;)

Ich muss aber beim Live-Binding doch den Scope angeben. Und da finde ich nicht wirklich was an Doku. Also beispielsweise: Welche Interfaces muss die Listenklasse erfüllen etc.

Stevie 23. Sep 2011 16:53

AW: [XE2] Live Bindings
 
Bezüglich der Expression Engine - DSharp Bindings werden in Zukunft (soom (tm)) eine Integration mit DWS bekommen.

mquadrat 23. Sep 2011 16:59

AW: [XE2] Live Bindings
 
Nice. Dann wäre das ja auch geklärt 8-)

Stevie 24. Sep 2011 00:26

AW: [XE2] Live Bindings
 
Hab gerade eine erste Version commited - designtime Unterstützung gibt's noch keine.

Daher muss man vorerst noch einiges im Code machen. In zukünftigen Versionen wird man es ähnlich wie bei den LiveBindings im Designer einstellen können.

Hier ein kurzer Beispiel Code:
Delphi-Quellcode:
uses
  DSharp.Core.DataConversion.Expressions,
  DSharp.DelphiWebScript.Expression;

procedure TForm1.FormCreate(Sender: TObject);
var
  bind: TBinding;
  conv: TExpressionConverter;
  expr: TDelphiWebScriptExpression;
begin
  conv := TExpressionConverter.Create;
  expr := TDelphiWebScriptExpression.Create;
  expr.Text := 'UpperCase(Edit1.Text)';
  expr.BindObject(Edit1);
  conv.TargetToSourceExpression := expr;
  bind := TBinding.Create(Label1, 'Caption', Edit1, 'Text', bmOneWayToSource, conv);
end;

Elvis 24. Sep 2011 07:37

AW: [XE2] Live Bindings
 
Stevie, wie löst du das Dependency-Tacking?
Ich meine, wenn mein Ausdruck von 3 Properties eines Objektes und 2 weiteren eines anderen abhängt, müsste sie ja dann neu evaluiert werden, wenn sich mind. eine davon ändert. (In deinem Fall der Text von einer TextBox)
Und das auch noch mit einer Verzögerung von X Millisekunden. Sodass du nur ein Refresh machst, wenn sich 10 Eigenschaften ändern.

Databinding ohne autom. nur das zu aktualisieren, was auch geändert werden muss, bringt glaube ich für komplexe Systeme nicht viel bis gar nix.
Die Perf-Kosten immer alles zu aktualisieren, oder der Verwaltungsaufwand um zu entscheiden was wann aktualisiert werden muss, würde ja den Aufwand eines Projektes mind. auf die Ebene bringen, die man ohne DataBinding hätte.
In Delphi sollte man sich ja in die Published-Properties klinken können, wenn ich mich nicht irre. Die Frage ist nur, ob du alle lesenden Zugriffe bemerkst.
Mir fällt da gerade was ein, aber da würde ich dich dann im jeweiligen DataBinding-Thread zu nerven. ;-)

Stevie 24. Sep 2011 10:32

AW: [XE2] Live Bindings
 
Für das Aktualisieren der Bindings ist das INotifyPropertyChanged interface zuständig. Wenn ein an das Binding angeschlossenes Object (Source oder Target) dieses interface implementiert klinkt sich das Binding dort ein. Bei allen allen Änderungen musst du das Aktualisieren manuell antriggern. Für die ScriptExpressions gibt es bisher garkeinen Automatismus - das wäre auch extrem schwierig, weil ich eigentlich ja nur ein Delphi Object in das Script bekannt mache. Damit kannst du im Script eigentlich nahezu alles anstellen, was du willst (und soweit die RTTI reicht, über die es dort angesprochen wird - mehr Infos dazu wird Eric Grange wissen). D.h. woher soll die Delphi Seite wissen, ob und wann es was triggern muss, da es ja nix vom Inhalt des Scripts kennt. Wenn man lustig sein will, kann man die Script Expressions auch für seine komplette Business Logik nutzen.

Verzögerte Aktualisierung ist nicht unterstützt - halte ich auch bisher nicht für notwendig. Bindings sind für den Transport von Informationen aus der GUI in andere Layer. Da sollten keine großartigen Berechnungen durchgeführt werden. Und falls das doch notwendig ist, gibt es immer noch die Möglichkeit, den UpdateTrigger des Bindings auf LostFocus oder Explicit zu setzen.

In dem Beispiel, was ich oben gepostet habe, triggert also das Binding immer, wenn ich im Edit etwas ändere. Ob die Script expression etwas komplett anderes in das Label schreibt, was überhaupt nix mit dem Edit1.Text zu tun hat, ist dann eine andere Sache und es wird auch nicht getriggert, wenn sich irgendwas im Script verwendetes ändert.

mquadrat 26. Sep 2011 16:06

AW: [XE2] Live Bindings
 
Hauptsächlich wird das ja denke ich auch für die Formatierungen oder simple Wertableitungen verwendet werden.

Stevie 26. Sep 2011 18:15

AW: [XE2] Live Bindings
 
Zitat:

Zitat von mquadrat (Beitrag 1126746)
Hauptsächlich wird das ja denke ich auch für die Formatierungen oder simple Wertableitungen verwendet werden.

Richtig. Dich hält aber trotzdem nix davon ab, alle Möglichkeiten von DWS (und das sind nicht wenige) auszuschöpfen und da nen Riesenscript an son Binding zu klemmen. Aber um die richtigen Timings und Trigger musst du dich dann selber kümmern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 Uhr.
Seite 1 von 5  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz