Delphi-PRAXiS
Seite 1 von 3  1 23      

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/)
-   -   [LiveBindings, DSharp]binden Feld/Variable<->TEdit (https://www.delphipraxis.net/163356-%5Blivebindings-dsharp%5Dbinden-feld-variable-tedit.html)

Jens01 26. Sep 2011 14:34

[LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Hallo..

gerade beschäftige ich mich mit diesen LiveBindings. Ich möchte gerne meine Felder/ Variablen mit den Controls binden. Also wenn z.B. in einen Edit der Text verändert wird, dann soll sich die Variable gleichzeitig ändern.
Die genannten Komponenten verbinden aber irgendwie nur die Controls untereinander oder Controlls zu Datenbanken.

Gibt es dafür eine Möglichkeit oder mache ich einen gedanklichen Fehler?

Gruss Jens

mquadrat 26. Sep 2011 15:23

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
LiveBindings:

Aktualisier mal deinen Samples-Ordner, da gibt es inzwischen Beispiele für. Für das Szenario: Du brauchst auf dem Form eine BindScope-Komponente. Die musst du dann bei den Bindings als Source eintragen. Im Code setzt du dann BindScope.DataObject auf dein Objekt.


DSharp:

Auch da müsste meiner Meinung nach ein Beispiel dabei sein (Sample5, wenn ich nicht irre).
EDIT: Hier die Variante im Code http://delphisorcery.blogspot.com/20...revisited.html und in einem Posting von Mai steht dann auch was über den IDE Support - hab ich noch nicht ausprobiert

Jens01 26. Sep 2011 16:29

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Also ein entsprechendes LiveBindings-Sample habe ich irgendwie nicht gefunden. Ich habe aber mit dem TBindScope weitergemacht und es funktioniert schon halb.
Auf dem VCL habe ich ein TEdit und ein TButton und folgenden Code:
Delphi-Quellcode:
  TForm1 = class(TForm)
    bndscp1: TBindScope;
    edt1: TEdit;
    bdglst1: TBindingsList;
    bndxprsnedt: TBindExpression;
    btn1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  end;

  TTest = class
  public
    s: string;
  end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  ShowMessage(Test.s);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Test := TTest.Create;
  Test.s := 'xxxyyy';
  bndscp1.DataObject := Test;
end;
SourceExpression ist auf Test.s gesetzt.
In der TEdit wird jetzt korrekt 'xxxyyy' angezeigt. Aber bei Änderung des TEdit.Text ändert sich Test.s nicht.

Da gibt es doch bestimmt eine noch fehlende Einstellung, oder? Ich hatte mit diesem Direction schon rumgespielt, brachte aber nichts.

mquadrat 26. Sep 2011 16:31

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Bei der Binding-Expression kann man auswählen ob das nur von Source zu Component ist oder auch bidirektional.

Jetzt wo du's sagst. Ich meine ich hätte das Beispiel auf Stack Overflow gefunden.

Jens01 26. Sep 2011 16:36

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Zitat:

Bei der Binding-Expression kann man auswählen ob das nur von Source zu Component ist oder auch bidirektional.
Ja, dies Direction habe ich auch auf dirBidirectional gesetzt, es gab aber das gleiche Ergebnis. Ich vermute, dass ich irgendwas vergessen habe.

Stevie 26. Sep 2011 18:23

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
DSharp unterstützt nicht das Binden von Controls an simple Variablen - wird es auch nicht bekommen. Ich sehe auch ehrlich gesagt keinen Sinn darin, an eine Variable zu binden. Machst du allerdings eine Property draus (dann sind wir auch wieder im OOP Land), geht das ohne Problem.

Du bist wie viele andere auch auf eins der größten design fails der LiveBindings reingefallen. Binden allein reicht nicht. Wenn du TBindExpression benutzt, tut sich im Edit garnix von alleine. Daher hab ich in meiner Gegenüberstellung in diese Bereich auch den Punkt an DSharp vergeben. Denn was bringt mir nen Binding, wenn ich hinterher eh das OnChange implementieren muss. :wall: Nur, wenn du TBindLink benutzt, wird im Edit der Observer aktiviert. TBindLink lässt sich aber afaik nicht mit nem simplen TObject Derivat verbinden. Und es führt dazu, dass dein Edit readonly ist, wenn die SourceComponent nicht IEditLink (oder so ähnlich) implementiert.

mquadrat 26. Sep 2011 18:23

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Das Notify im OnChange hast du?

Jens01 26. Sep 2011 19:37

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Zitat:

Das Notify im OnChange hast du?
Das wird es wohl sein. Ich habe mittlerweile auch das Beispiel auf Stackoverflow gefunden.

@Stevie
Ja, irgendwie hatte ich sowas geahnt.
Läßt sich mit DSharp Stringgrids mit Listen verbinden. Ich habe Felder(keine Datenbank) aus Objekten in Listen, die ich zeilenweise darstelle und dort auch änderbar sind.

Stevie 26. Sep 2011 20:45

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Zitat:

Zitat von Jens01 (Beitrag 1126807)
@Stevie
Ja, irgendwie hatte ich sowas geahnt.
Läßt sich mit DSharp Stringgrids mit Listen verbinden. Ich habe Felder(keine Datenbank) aus Objekten in Listen, die ich zeilenweise darstelle und dort auch änderbar sind.

Unterstützte gridähnliche Controls bisher sind nur TListView und TVirtualTreeView. TStringGrid steht aber auf der Todo Liste.

Jens01 26. Sep 2011 20:57

AW: [LiveBindings, DSharp]binden Feld/Variable<->TEdit
 
Also guck ich mir das Ganze noch eine Zeit lang aus einem gewissen Abstand an.8-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.
Seite 1 von 3  1 23      

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