LoginSignup
3
2

More than 3 years have passed since last update.

バインディングコントロールまとめ

Last updated at Posted at 2016-07-20

はじめに

LiveBindingでは、多くのバインディングコントロールが用意されている。が、マニュアルを読んでもイマイチ使い道が分かりいくい(気がする)。
なので、個人的所見や感想を添えて、ちょっとまとめてみた。

クイック バインディング

  • TLinkGridToDataSource
    • TGrid(FMX)、TStringGrid(FMX, VCL)専用
    • グリッドとデータソースのバインドにはこれ使っておけば問題ない
    • データソースのItemIndexの通知も行ってくれる
  • TLinkListControlToField
    • TListBox(FMX, VCL)専用
    • リストボックスとデータソースのバインドにはこれ使っておけば問題ない
    • データソースのItemIndexの通知も行ってくれる
  • TLinkControlToField
    • Control -> Sourceの単一方向バンド
    • 入力チェックだなんだを考え出すと、この方向のバインディングが邪魔になるので使うことは稀
  • TLinkControlToProperty
    • TLinkControlToFieldと同機能
    • 同様に不要
  • TLinkPropertyToField
    • Source -> Controlの単一方向バインド
    • ひとつのコントロールにひとつ用意する
    • LiveBindingで接続を行った場合に自動的に選択される
    • トイプログラムなら問題なく使える
      • 10個を越えたあたりで性能の劣化が感じられる(気がする)
      • 画面に大量のコントロール配置するときは使わない方が無難
  • TLinkFillControlToField
    • LiveBindingデザイナでリストボックスとの接続を行った際に自動的に選択される
    • ゴミ
    • TLinkGridToDataSourceやTLinkListControlToFieldで代用可
  • TLinkFillControlToProperty
    • LiveBindingデザイナでグリッドコントロールとの接続を行った際に自動的に選択される
    • ゴミ
    • TLinkGridToDataSourceやTLinkListControlToFieldで代用可

バインディング式

  • TBindExpression
    • 双方向バインディグ可能
    • ゴミ
    • 双方向のバインドはコードを複雑化するだけのデメリットしかないので不要
  • TBindExprItems
    • 双方向バインディグ可能
    • ゴミ
    • 双方向のバインドはコードを複雑化するだけのデメリットしかないので不要

リンク

  • TBindLink
    • Source -> Controlの単一方向バンド
    • TBindGridLinkで代用可能
  • TBindListLink
    • Source -> Controlの単一方向バンド
    • TBindGridLinkがリストボックスにも使えるのでゴミ
  • TBindGridLink
    • Source -> Controlの単一方向バンド
    • マニュアルには「グリッド コントロールが~」と書かれているが、リストボックスでも使用可
    • コントロールとデータソースの接続が確立した最初の一回だけ式をパースする
      • 効率的
      • バインド式がカレント要素を指しているため、コレクションの再表示がうっかり走ると表示がおかしくなるかも
        • カスタムのエディットオブジェクトを使用したときの現象なので、標準コンポーネントでは発生しない(と祈りたい)
  • TBindPosition
    • グリッドやリストボックスの選択行と同期するために使用される
    • TBindLinkと併せて使われる
      • TBindListLinkが内包しているので、使い道なし
  • TBindControlValue
    • 使い道不明
    • 素直にTLinkGridToDataSourceやTLinkListControlToField使っとけ

リスト

  • TBindList
    • 産廃
    • 粗大ゴミ
    • リストボックスの行数回、式をパースする
      • 遅すぎて使い物にならない
  • TBindGridList
    • 産廃
    • 粗大ゴミ
    • グリッドの要素数回、式をパースする
      • 遅すぎて使い物にならない

おまけ

  • TCustomBindGridListLink
    • TLinkGridToDataSourceやTLinkListControlToFieldの実装の詳細として使用されている
    • コレクションバインディング、ポジションバインディングの両機能を備える
    • TBindGridLinkの上位版
      • TBindGridLinkの懸念点も解消されてた気がする
    • ただしビジュアルコンポーネントが用意されていない
      • LiveBindingデザイナを使用しないのであれば最強(と思ってる)

まとめ

  • TLinkGridToDataSource、TLinkListControlToField、TLinkPropertyToFieldを使っておけば、とりま困らない。
  • カスタムのエディットオブジェクト作るなら、TBindGridLinkが便利
  • LiveBindingデザイナを使用しないなら、TCustomBindGridListLinkが最強
  • あとはゴミ、産廃

追記

カスタムのエディットオブジェクト作るなら、TBindGridLinkが便利と書いたが・・・、こいつにはいけてない点がひとつある。

TBindListLink, TBindList、TBindGridListについては、

  • TBindListLink, TBindListであれば、Editorプロパティ
  • TBindGridListであれば、ListItemStyleプロパティ

で、カスタムのエディットオブジェクトと関連付けが行える。
がしかし、TBindGridLinkは関連付けのためのプロパティは用意されていない。
そのためLiveBindingデザイナでうまくやることができず、コードでなんやかんややりくりする羽目となる(結構メンドイ)。

なんやかんややりくりするくらいなら、はじめからTCustomBindGridListLink使った方がはるかにマシです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2