バインドのターゲット
ターゲットとなる対象は以下から派生されるオブジェクトです。
- System.Windows.FrameworkElement
- System.Windows.DependencyObject(Silverlight 4より)
下記の継承の階層構造を見てみると、System.Windows.FrameworkElementの下には、さまざまなコントロールがあることが分かります。PanelやUserControl自身もターゲットとなります。
System.Object
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.GeneralTransform
System.Windows.Media.Projection
:
以下省略
System.Windows.UIElement
System.Windows.FrameworkElement
System.Windows.Controls.AccessText
System.Windows.Controls.AdornedElementPlaceholder
System.Windows.Controls.ContentPresenter
System.Windows.Controls.Control
System.Windows.Controls.Decorator
System.Windows.Controls.Image
:
以下省略
また、Silverlight 4では、より上位にあるSystem.Windows.DependencyObjectの派生オブジェクトにバインドできるようになりました。これは例えばコントロール以外にもTransformやProjectionなどに直接バインドできることを意味します。
実際にこの例を見てみましょう。
以下のコードのように、コントロールと、Projectionの双方にバインドできるのがSilverlight 4の特徴です。この例は、TextBlockのTextプロパティをTextBoxのTextプロパティに、PlaneProjectionのRotationZをSliderのValueにバインドしています。
<TextBlock Name="textBlock1" Text="{Binding ElementName=textBox1, Path=Text}">
<TextBlock.Projection>
<PlaneProjection RotationZ="{Binding ElementName=slider1, Path=Value}" />
</TextBlock.Projection>
</TextBlock>
<TextBox Name="textBox1" Background="#FFE5B3B3" />
<Slider Name="slider1" Maximum="360" Height="44" Width="497" />
この実行結果は次のようになります。TextBoxに入力した文字がTextBlockに表示され、Sliderを動かすとTextBlockの文字が回転します。

バインドのターゲットとなるプロパティは依存関係プロパティと呼ばれ、通常のCLRプロパティとは異なるものです。依存関係プロパティは、自身の値を「他の入力」から計算・取得する方法が提供されているプロパティです。この「他の入力」の代表的な1つとしてデータバインドがあるわけですが、幸いなことに主要なプロパティのほとんどが依存関係プロパティになっているため、データバインドを行ううえではあまり意識する必要はありません。しかし、Silverlight・WPFといったXAMLベースのテクノロジの根本的な機能に相当するので、最終的には理解した方がより詳細な実装ができることは言うまでもないでしょう。
