作成中



概要

バインディングは2つのデータ(=クラスのプロパティ)を同期させる仕組み。
たとえば、データベースの値(を表すプロパティ)と、
画面上のテキストを同期させる。
必ずしも瞬時に同期されるわけではなく、
たとえば、一連の値を画面に入力させて、
OKを押したときに入力データを検証して大丈夫だったらデータベースの値に反映する。

用語

ソース:同期させるデータの一方(通常、アプリケーションのデータ)
ターゲット:同期させるデータの一方(通常、UIElementのプロパティ)

使用例

  • 典型的な例は、XAML上でバインディングを指定して、
アプリケーションが持っているデータと、画面上のUIElementのプロパティを同期させる。

メモ

  • 反映されるタイミングはデフォルトで決まっている(カスタマイズ可能)
ほとんどのUIは操作した瞬間。テキストボックスだけはフォーカスが外れたとき。
ただし、BindingGroupを用いることで任意のタイミングで一気に反映させることが可能

注意

  • TargetのクラスはDependencyObjectで、プロパティはDepencencyPropertyでなければならない

記述方法

DataContextにバインドする

  • もっとも基本的な方法で以下のように省略してかける
{Binding Path=プロパティ名}
  • ItemsControl(リストなど)が絡むとDataContextが自動的にかわることに注意すれば難しくないだろう

WindowやUserControlのプロパティに中の要素からバインディングする

			<TextBlock Foreground="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=Foreground}" 

WindowやUserControlのコードビハインドにあるプロパティにバインドする

  • WindowにName属性を指定しておく
  • バインディングを以下のように書く
{Binding ElementName=Windowに付けたName属性, Path=プロパティ名}
  • WindowじゃなくてButtonのプロパティなどの場合も同じ

(XAML上で)外側で定義している要素へのバインディング

  • 上記と同じようにNameを付けてElementNameを指定する

クラスのstaticプロパティへのバインディング

  • WindowまたはUserControlにxmlnsを設定する
xmlns:media="clr-namespace:System.Windows.Media;assembly=PresentationCore"
  • Bindingはx:Staticを使う
{Binding Source={x:Static media:Fonts.SystemFontFamilies}}

シングルトンのプロパティへのバインディング

Command="{Binding Source={x:Static vm:CommonCommands.Singleton}, Path=ShowXXXCommand}"
※上記はシステムフォントのリストをXAMLでバインディングするように指定する例

参考:Triggerに絡んだバインディング

Triggerにからむと混乱するので、まとめた記事を一応リンク貼っておきます
リンク

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

どなたでも編集できます