Anzeigen: Delphi C++
Anzeigeeinstellungen

LiveBindings in RAD Studio

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

Nach oben zu Einführung in RAD Studio


LiveBindings ist eine Datenbindungsfunktion, die in RAD Studio von der VCL und von FireMonkey unterstützt wird. LiveBindings ist ausdrucksbasiert. Das bedeutet, dass Objekte anhand von Ausdrücken über ihre Eigenschaften aneinandergebunden werden.

Inhaltsverzeichnis

Übersicht über LiveBindings

LiveBindings basiert auf relationalen Ausdrücken, den Bindungsausdrücken, die entweder unidirektional oder bidirektional sein können. LiveBindings unterscheiden zwischen Steuerobjekten und Quellobjekten. Über Bindungsausdrücke kann jedes Quellobjekt an sich selbst (es wird zum Quell- und Steuerobjekt) oder an ein anderes Steuerobjekt gebunden werden. Dies erfolgt einfach durch Definition eines Bindungsausdrucks, der eine oder mehrere Eigenschaften der zu bindenden Objekte betrifft. Sie können beispielsweise ein TEdit-Steuerelement an ein TLabel-Objekt binden, damit bei Änderungen des Textes in dem Eingabefeld die Beschriftung des Labels automatisch an den von Ihrem Bindungsausdruck berechneten Wert angepasst wird. Ein weiteres Beispiel ist das Binden eines Schieberegler-Steuerelements an eine Fortschrittsleiste, damit beim Bewegen des Schiebereglers der Fortschritt erhöht oder verringert wird.

Auf dieselbe Art und Weise können Sie Verbindungen zu Datenbanken herstellen, eine oder mehrere Eigenschaften von verschiedenen Objekten ändern usw. Da LiveBindings übernommen werden, können Sie sogar Eigenschaften von Objekten ändern, die mit anderen an ein Steuerobjekt gebundenen Objekten verbunden sind.

Verwendung von LiveBindings

LiveBindings können in VCL- und FMX-Anwendungen mit Hilfe des Objektinspektors und der visuellen LiveBindings-Komponenten verwendet werden. Es gibt aber auch eine Möglichkeit, LiveBindings programmgesteuert in Konsolenanwendungen zu verwenden.

In den folgenden Tutorials werden die Grundlagen der Verwendung von LiveBindings gezeigt:

LiveBindings können verwaltet oder unverwaltet sein. Verwaltete Bindungen werden automatisch ausgewertet, wenn in dem Eingabeausdruck ein Objekt oder eine Eigenschaft geändert wird. Wenn beispielsweise der Eingabeausdruck die Eigenschaft Text einer Eingabefeldkomponente namens Edit1 referenziert, wird die Bindung ausgewertet, wenn die Ausdrucks-Engine über eine Änderung von Edit1 informiert wird. TBindingList.Notify wird zur Benachrichtigung der Ausdrucks-Engine aufgerufen. Der erste Parameter für Notify() ist das Objekt (in diesem Beispiel Edit1), und der zweite Parameter ist die betroffene Eigenschaft. Der Eigenschaftparameter kann leer sein, damit alle das Objekt referenzierende Bindungen ausgewertet werden.

RAD Studio verfügt über kein Benachrichtigungssystem, das die Ausdrucks-Engine über Änderungen von Objekten oder Eigenschaften informiert. In den Beispielanwendungen wird Notify in den Ereignisbehandlungsroutinen aufgerufen. Typischerweise wird mit dem Parameter Sender der Ereignisbehandlungsroutine BindingsList1.Notify(Sender, ''); aufgerufen. Auf diese Weise können Sie mit einer Ereignisbehandlungsroutine Benachrichtigungen von vielen Steuerelementen behandeln. Die Beispielanwendung SynchControlsSampleProject (die auch in der Tabelle unten aufgeführt ist) zeigt die Implementierung der Benachrichtigung.

TBindExpression und TBindExprItems sind LiveBindings-Komponenten, die verwaltete Bindungen unterstützen. Setzen Sie dazu die Eigenschaft Managed. Diese beiden Komponenten verfügen über eine weitere Eigenschaft, die sich auf Benachrichtigungen auswirkt. Wenn die Eigenschaft NotifyOutputs True ist, sendet die Ausdrucks-Engine automatisch eine Benachrichtigung an das Ausgabeobjekt oder die Ausgabeeigenschaft, die bei der Auswertung der Bindung geändert wird.

Keine der anderen Bindungskomponenten verwendet verwaltete Bindungen. Sie verwenden unverwaltete Bindungen, die immer explizit ausgewertet werden.

Die Komponenten TBindLink, TBindListLink und TBindGridLink und die eng damit verbundenen FireMonkey TBindDB*Link-Komponenten binden Daten, wie ein TDataSet-Feld, an Steuerelemente, wie z.B. TEdit. Anstatt mit dem Abhängigkeitsgraphen der Ausdrucks-Engines Steuerelemente und Daten synchron zu halten, empfangen diese Komponenten Benachrichtigungen von den Datenquellen und Benachrichtigungen von den Steuerelementen (mit der neuen TObserver-API). Das System ist eine Neuorganisation des VCL-DB-sensitiven Steuerelementdesigns, was mehr als das einfache Synchronisieren von zwei Eigenschaften ausführen kann. Damit ein Steuerelement mit diesen Komponenten arbeiten und Dateneingaben unterstützen kann, muss es die TObserver-API implementieren. Schreibgeschützte Steuerelemente wie TLabel müssen die TObserver-API nicht unterstützen. Da TBindLink so konzipiert wurde, dass es wie VCL-DB-sensitive Steuerelemente arbeitet, kann es gut mit Formularen eingesetzt werden, die VCL-DB-sensitive Steuerelemente verwenden, und bietet den Vorteil der Unterstützung von komplexen Ausdrücken und VCL-Standardsteuerelementen.

TBindPosition ist eine weitere Komponente, die Steuerelementbenachrichtigungen mit der TObserver-API empfängt. Diese Komponente wird mit Komponenten verwendet, die eine Position haben, wie TListBox, Vcl.StdCtrls.TScrollBar oder TTracker. Siehe das BindLookupVCLProject-Beispiel, das die Verwendung von TBindPosition zeigt.

Es gibt zwei weitere Komponenten, die unverwaltete Bindungen verwenden. Mit TBindList und TBindGridList werden Listen oder Tabellen gefüllt. Zwei Bindungskomponenten können gemeinsam für dasselbe Steuerelement eingesetzt werden. Daher kann beispielsweise mit einer TBindList- zusammen mit einer TBindDBList-Komponente ein TListBox-Steuerelement gefüllt werden, das ein TDataSet-Feld bearbeiten kann.

Beispiele für LiveBindings

Es gibt eine Reihe von LiveBindings-Beispielanwendungen, die zusammen mit RAD Studio ausgeliefert werden. Sie finden diese Beispiele durch Auswählen von Start | Programme | Embarcadero RAD Studio XE2 | Beispiele. Der betreffende Ordner heißt Delphi\LiveBinding. Diese Beispiele sind in der folgenden Tabelle nach Kategorien (FMX oder VCL) aufgeführt. Einige der Beispielanwendungen sind für FMX und VCL verfügbar, andere nur für eine der beiden Kategorien. Die Hauptprojektgruppe für alle LiveBindings-Beispiele hat den Namen BindSamplesGroup.groupproj.

Tipp: Informationen zum Aktualisieren des Beispielverzeichnisses auf die neueste SVN-Version finden Sie im Hilfethema Sample.
FMX-LiveBindings-Beispiele VCL-LiveBindings-Beispiele
BindComponentsExprProject N/V
BindDBExprSampleProject N/V
BindExpressionSampleProject N/V
SynchControlsSampleProject N/V
BindGridLinkFMXProject BindGridLinkVCLProject
BindLinkFMXProject BindLinkVCLProject
BindLinkFMXProject BindLinkVCLProject
BindListFMXProject BindListVCLProject
N/V BindListEditVCLProject
N/V BindLookupVCLProject

In diesen Beispielen wird detailliert die Erstellung fortgeschrittener Anwendungen mit LiveBindings gezeigt.

Der Quelltext der LiveBindings-Beispiele in Ihrer Produktinstallation befindet sich in einem öffentlichen Subversion-Repository auf SourceForge:

Visuelle Komponenten für LiveBindings

Die LiveBindings-Engine ist eine Laufzeitfunktion, aber eine Reihe von visuellen Komponenten sind zur Unterstützung der Erstellung von Bindungen zwischen Komponenten beim Entwurf in der Komponentenpalette enthalten.

In der Komponentenpalette befinden sich auf der Registerkarte LiveBindings die folgenden Komponenten, die Sie per Drag&Drop auf einem Formular (VCL oder FMX) platzieren können:

Tipp: Wenn Sie mit dem Objektinspektor Live-Bindungen zwischen Komponenten erstellen, wird die entsprechende LiveBindings-Komponente (TBindingsList) automatisch auf dem Formular platziert. Diese Komponente enthält eine Liste aller in Ihrer Anwendung verfügbaren Bindungen. Weitere Informationen über Bindungslisten finden Sie in dem Thema Bindungslisten.

API-Referenz zu LiveBindings

Die folgenden Units sind Teil der LiveBindings-Engine. Die Dokumentation in den entsprechenden Hilfethemen enthält Informationen über die Verwendung der LiveBindings-API.

Unit-Name Enthält
System.Bindings.CustomScope Benutzerdefinierte gültigkeitsbereichsbezogene Klassen
System.Bindings.CustomWrapper Benutzerdefinierte Wrapper-bezogene Klassen
System.Bindings.EvalProtocol Von der Engine für Wrapper, Gültigkeitsbereiche und andere interne Strukturen verwendete Interfaces
System.Bindings.Expression Bindungsausdrucksbezogene Klassen
System.Bindings.ExpressionDefaults Standardverhalten für Bindungsausdrücke
System.Bindings.Factories Generatoren für Ausdrücke, Manager und Gültigkeitsbereiche
System.Bindings.Helper Tools für das programmgesteuerte Erstellen von Bindungsausdrücken und Benachrichtigungen
System.Bindings.Manager Bindungsmanagerbezogene Implementierungen
System.Bindings.ManagerDefaults Standardverhalten für Bindungsmanager
System.Bindings.Methods Steuerung von Methoden, die im Skript verwendet werden können
System.Bindings.Outputs Tools zur Steuerung von Ausdrucksausgaben
Hinweis: Wenn Sie mit C++Builder Konsolenanwendungen mit LiveBindings entwickeln, müssen Sie den C++-Compiler explizit anweisen, die RTTI-Informationen für die Klassen in Ihrem Projekt zu erzeugen. Fügen Sie dazu die Direktive #pragma explicit_rtti methods() am Anfang Ihres Projekts ein, wie im Tutorial "Programmgesteuerte Verwendung von LiveBinding" gezeigt. Weitere Informationen über die Direktive #pragma explicit_rtti methods() finden Sie im Hilfethema #pragma explicit_rtti.

Siehe auch

Tutorials

Frühere Versionen
In anderen Sprachen