表示: Delphi C++
表示設定

RAD Studio での LiveBinding

提供:RAD Studio XE2
移動: 案内, 検索

RAD Studio 入門 への移動


LiveBinding は、RAD Studio において VCL と FireMonkey の両方でサポートされているデータ バインディング機能です。 LiveBinding は式に基づいています。つまり、式を使用して、オブジェクトをそれらのプロパティを通じて相互にバインドします。

目次

LiveBinding の概要

LiveBinding は、バインディング式と呼ばれる、単方向にも双方向にもできる関係式に基づいています。 LiveBinding はまた、コントロール オブジェクトソース オブジェクトについてのものでもあります。 バインディング式により、バインドするオブジェクトの 1 つ以上のプロパティが含まれるバインディング式を定義するだけで、任意のソース オブジェクトを自分自身にも他の任意のコントロール オブジェクトにもバインドすることができます(自分自身にバインドする場合は、それ自身がソース オブジェクトにもコントロール オブジェクトにもなります)。 たとえば、TEdit コントロールを TLabel にバインドすることで、編集ボックス内のテキストが変わったら、バインディング式で評価された値に合わせてラベルのキャプションが自動的に変更されるようにすることができます。 あるいは、トラック バー を動かすにつれて進行状況が上下するようにトラッカー コントロールを進行状況バーにバインドするという例もあります。

同じようにして、データベースに接続したり、さまざまなオブジェクトの 1 つ以上のプロパティを変更する、といったことができます。 LiveBinding は伝播するので、コントロール オブジェクトにバインドされている他のオブジェクトに接続されているオブジェクトのプロパティを変更することさえできます。

LiveBinding の使用法

[オブジェクト インスペクタ]と、LiveBinding で使用されるビジュアル コンポーネントを使って、VCL アプリケーションや FMX アプリケーションで LiveBinding を使用することができます。 一方、LiveBindings をコンソール アプリケーションプログラムで使用する方法があります。

以下のチュートリアルでは、LiveBinding を使用するうえでの基本事項を示します。

LiveBinding はマネージでもアンマネージでもかまいません。 マネージ バインディングは、入力式中のオブジェクトまたはプロパティが変更されたときに自動的に評価されます。 たとえば、入力式で Edit1 という編集ボックス コンポーネントの Text プロパティが参照されている場合は、式エンジンに Edit1 の変化が通知されると、バインディングが評価されます。 式エンジンに通知するために TBindingList.Notify が呼び出されます。 Notify() の第 1 パラメータはオブジェクト(この例では Edit1)で、第 2 パラメータは影響を受けるプロパティです。 このオブジェクトを参照するすべてのバインディングが評価されるように、プロパティ パラメータは空でもかまいません。

RAD Studio には、オブジェクトまたはプロパティの変化を式エンジンに知らせる通知システムがありません。 サンプル アプリケーションでは、Notify はイベント ハンドラから呼び出されます。 通常、イベント ハンドラの Sender パラメータは、BindingsList1.Notify(Sender, ''); を呼び出すのに使用されます。 こうして、1 つのイベント ハンドラを使用して、多数のコントロールからの通知を処理できます。 サンプル アプリケーション SynchControlsSampleProject(これも以下の一覧表に含まれています)では、通知オブジェクトがどう実装されるかを示しています。

TBindExpressionTBindExprItems は、マネージ バインディングをサポートしている LiveBinding コンポーネントです。 Managed プロパティを設定します。 これら 2 つのコンポーネントにはまた、通知に影響を及ぼす別のプロパティがあります。 NotifyOutputs プロパティが True の場合、式エンジンは、バインディングの評価時に、変更される出力オブジェクトまたはプロパティに自動的に通知を送ります。

その他のバインディング コンポーネントでは、マネージ バインディングを使用しません。 その代わり、アンマネージ バインディングを使用します。これは常に明示的に評価されます。

TBindLinkTBindListLinkTBindGridLink の各コンポーネントおよび密接に関係している FireMonkey TBindDB*Link コンポーネントでは、TDataSet フィールドなどのデータを TEdit などのコントロールにバインドします。 これらのコンポーネントでは、式エンジンの依存関係グラフに基づいてコントロールとデータの同期を保つのではなく、(新しい TObserver API を使って)データ ソースからの通知とコントロールからの通知をリスンします。 システムは VCL DB 対応コントロール設計を再編成したものになり、単に 2 つのプロパティの同期を保つ以上のことが行われます。 コントロールがこれらのコンポーネントと連携して動作し、データ入力をサポートするには、TObserver API を実装する必要があります。 TLabel のような読み取り専用コントロールでは、TObserver API をサポートする必要はありません。 TBindLink は VCL DB 対応コントロールのような動作をするように設計されているため、VCL DB 対応コントロールを使用するフォームとうまく組み合わせることができ、複雑な式と標準の VCL コントロールをサポートするという利点があります。

TBindPosition コンポーネントは、TObserver API を使ってコントロールからの通知をリスンするもう 1 つのコンポーネントです。 このコンポーネントは、TListBoxVcl.StdCtrls.TScrollBarTTracker のような、位置を持つコンポーネントと共に使用されます。 TBindPosition の使用方法については、BindLookupVCLProject サンプルを参照してください。

アンマネージ バインディングを使用するコンポーネントは、他に 2 つあります。 TBindListTBindGridList は、リストまたはグリッドに値を設定するのに使用されます。 2 つのバインディング コンポーネントを同じコントロールで一緒に使用することができます。 そのため、たとえば、TBindList コンポーネントと TBindDBList コンポーネントを一緒に使用して、TDataSet フィールドを編集できる TListBox に値を設定できます。

LiveBinding のサンプル

RAD Studio には LiveBinding の多数のサンプル アプリケーションが付属しており、[スタート|(すべての)プログラム|Embarcadero RAD Studio XE2|サンプル]を選択することで、それらを見つけることができます。 対象となるフォルダは Delphi\LiveBinding です。 以下の表には、これらのサンプルの一覧を、対応するカテゴリ(FMX または VCL)で分けて示します。 サンプル アプリケーションのなかには、FMX でも VCL でも使用できるものもあれば、どちらか一方のカテゴリでのみ使用できるものもあります。 すべての LiveBinding サンプルのメイン プロジェクト グループは BindSamplesGroup.groupproj です。

ヒント: Samples ディレクトリを最新の SVN のバージョンへ更新する方法の詳細については、ヘルプ トピック「Sample」を参照してください。
FMX の LiveBinding サンプル VCL の LiveBinding サンプル
BindComponentsExprProject N/A
BindDBExprSampleProject N/A
BindExpressionSampleProject N/A
SynchControlsSampleProject N/A
BindGridLinkFMXProject BindGridLinkVCLProject
BindLinkFMXProject BindLinkVCLProject
BindLinkFMXProject BindLinkVCLProject
BindListFMXProject BindListVCLProject
N/A BindListEditVCLProject
N/A BindLookupVCLProject

これらのサンプルは、機能強化されたアプリケーションを LiveBinding を使って作成する方法の詳細を示しています。

インストールされた製品に含まれている LiveBinding サンプルのソースは、以下のとおり、SourceForge にある公開 Subversion リポジトリにチェックインされています。

LiveBinding ビジュアル コンポーネント

LiveBinding エンジンは実行時機能ですが、多数のビジュアル コンポーネントがコンポーネント パレットに用意されており、設計時にコンポーネント間のライブ バインディングを作成するのに役立ちます。

コンポーネント パレットをざっと見ると、[LiveBinding]タブには、フォーム(VCL か FMX のどちらか)にドラッグ アンド ドロップできる以下のコンポーネントがあります。

ヒント: [オブジェクト インスペクタ]を使用してコンポーネント間のライブ バインディングを作成すると、適切な LiveBinding コンポーネント(TBindingsList)がフォームに自動的に配置されます。 このコンポーネントには、アプリケーションで使用できる全バインディングのリストが格納されています。 バインディング リストについての詳細は、「バインディング リスト」を参照してください。

LiveBinding API リファレンス

以下のユニットは LiveBinding エンジンの構成要素です。 それらの適切なヘルプ トピックのドキュメントには、LiveBinding API の使用に関する情報が記載されています。

ユニット名 内容
System.Bindings.CustomScope カスタム スコープに関連するクラス
System.Bindings.CustomWrapper カスタム ラッパーに関連するクラス
System.Bindings.EvalProtocol ラッパー、スコープなどの内部構造体のエンジンで使用されるインターフェイス
System.Bindings.Expression バインディング式に関連するクラス
System.Bindings.ExpressionDefaults バインディング式のデフォルト動作
System.Bindings.Factories 式、マネージャ、スコープのファクトリ
System.Bindings.Helper プログラムによるバインディング式の作成と通知のためのツール
System.Bindings.Manager バインディング マネージャに関連する実装
System.Bindings.ManagerDefaults バインディング マネージャのデフォルト動作
System.Bindings.Methods スクリプトで使用できるメソッドの管理
System.Bindings.Outputs 式出力の管理用ツール
ヒント: C++Builder を使用して、LiveBinding を利用するコンソール アプリケーションを開発する場合は、プロジェクトを構成するクラスの RTTI 情報を生成するように C++ コンパイラに明示的に指示する必要があります。 それには、#pragma explicit_rtti methods() 指令をプロジェクトの最初に追加します(「チュートリアル: LiveBinding をプログラムで使用する」に示されています)。#pragma explicit_rtti methods() 指令の詳細については、「Pragma explicit rtti」ヘルプ トピックを参照してください。

関連項目

チュートリアル

以前のバージョン
他言語版