This article is currently in the process of being translated into Japanese (~87% done).
Data binding via Code-behind
以前のデータバインディングの例で見たように、XAMLを使ってバインディングを定義するのは非常に簡単です。しかし、特定のケースでは、代わりにコードビハインドを使いたいこともあるかもしれません。これも同様に簡単で、XAMLを使うのと正確に同じ機能を提供してくれます。"Hello, bound world" サンプルを試してみましょう。ただし今回は必要なバインディングをコードビハインドで作ります。
<Window x:Class="WpfTutorialSamples.DataBinding.CodeBehindBindingsSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CodeBehindBindingsSample" Height="110" Width="280">
<StackPanel Margin="10">
<TextBox Name="txtValue" />
<WrapPanel Margin="0,10">
<TextBlock Text="Value: " FontWeight="Bold" />
<TextBlock Name="lblValue" />
</WrapPanel>
</StackPanel>
</Window>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace WpfTutorialSamples.DataBinding
{
public partial class CodeBehindBindingsSample : Window
{
public CodeBehindBindingsSample()
{
InitializeComponent();
Binding binding = new Binding("Text");
binding.Source = txtValue;
lblValue.SetBinding(TextBlock.TextProperty, binding);
}
}
}
Binding のインスタンスを作ることで動作します。必要な path を直接コンストラクタに指定します。Text プロパティにバインドしたいので、この場合は "Text" です。次に Source を指定します。この例では、TextBox コントロールにする必要があります。これで、WPFはTextBoxをソースコントロールとして使うべきことを知っていて、明確に、Text プロパティが保持する値を探していることを知っています。
最後の行では、新しく作った Binding オブジェクトと、目的・目標のコントロールを結びつけるために SetBinding メソッドと使います。この場合、目標は TextBlock (lbValue) です。SetBinding() メソッドは2つのパラメータを取ります。一つはバインドしたい依存プロパティで、もう一つは使いたいバインディングオブジェクトです。
まとめ
この様に、C#でバインディングを作るのは簡単です。データバインディングの初心者にとって、これらを内部で生成するXAMLの構文と比較した場合、C#の方が把握するのは多分少し簡単でしょう。どちらを使うかはあなた次第です。どちらもうまく動きます。