BT

C++とDelphi用のLiveBindingsについて

| 作者: Jonathan Allen フォローする 529 人のフォロワー , 翻訳者 編集部N フォローする 0 人のフォロワー 投稿日 2013年1月28日. 推定読書時間: 3 分 |

原文(投稿日:2013/01/23)へのリンク

 

バインディング式は、XAML や Flex開発者にとっては新しい概念ではない。しかし、WinRTプログラミングで唯一使われるC++/CXの以外では、それはネイティブプログラミング言語で、普通見られるものではない。 VCL と FireMonkeyの両方向けに設計された、LiveBindings はこの常識の例外である。

まずちょっとした背景から。 VCL すなわち Visual Component Library は、 Delphi と C++ Builderによって共有される古いUIフレームワークである。 x86 と x64モードの両方をサポートし、Windows OS上のみである。FireMonkeyは新しいアプリ向けのVCLの置き換えである。Windows と OS Xの両方をターゲットにすることができる。FileMonkey と VCLは同じアプリで使用できるが、同一モジュールでは使用できない。

Embarcaderoによると、

LiveBindingsはバインディング式と呼ばれる関係式をベースにしており、単方向にも双方向にもなり得る。 LiveBindingsはまた、コントロールオブジェクトとソースオブジェクトに関するものある。バインディング式によって、どのオブジェクトでも他のどのオブジェクトとバインドできる。単に一緒にバインドしたいオブジェクトの1つかそれ以上のプロパティを含んだバインディング式を定義するだけである。例えば、TEdit コントロールを TLabelにバインドできるので、エディットボックスでテキストが変わったら、ラベルのキャプションが自動的にバインディング式によって評価された値に調整される。他の例としては、トラックバーコントロールをプログレスバーにバインディングして、トラックバーの動かし方に応じて、プログレスを上げたり、下げたりできる。

多くのDelphi/C++ Builder ツールのように、LiveBindingsは一般にGUIツールを使って生成される。2つのオプションLiveBindings DesignerLiveBindings Wizardがある。これは XAML や Flexでバインディング式をマニュアルで編集きた開発者を間違いなく悩ませる。

注意:バインディングをプログラムで編集するのは可能であるが、これは絶対やらないこと。これについての文書は、コンソールアプリケーションのチュートリアル内に埋もれている。

ちょっと複雑なデザインパターンを実装するのにオブジェクトを必要とする.NETと違って、Delphi と C++ Builder のオブジェクトはデフォルトでバインドできる。実質的にあらゆるオブジェクトのように、単にTObjectをサブクラス化して、それから普通のオブジェクトのようにプロパティを公開する必要がある。 C++ Builderでは、これは__property 拡張キーワードを使うことを意味している。

実際にバインディング式を適用するコードは非常に冗長だが、複雑な式が使える。以下の例は式 'o1.IntegerValue + o2.IntegerValue' はターゲットプロパティにバインドされている。 

XAML技術では、バインディング式はイベントをベースにしている。メモリーリークを避けるために、内部で「弱いイベント」構造を使用して、バインディング式によって渡される必要のある PropertyChangedイベントをモニターしている。この構造は、あらゆるバインディングが一元的に登録されている必要があるが、ほとんどの開発者はこの事実を知らない。

LiveBindingsには、プロパティ変更イベントの概念がない。なので似たような抽象化は不可能である。バインディングは、なお一元的に登録されているが、プロパティが変わった時に、バインディングエンジンは、明示的に通知される必要がある。これは オブジェクトとプロパティ名を受け取るTBindings.Notify関数を使って行われる。

理論的には、TBindings.Notify関数はプロパティsetterによって呼び出せるが、それを明示的に呼び出すクライアントコード必要性を排除している。これはマルチスレディングについての疑問を引き起こすが、ドキュメントには何も書かれていないが、弱いイベントの必要性を排除している。

 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT