データバインディングとは

データバインディングとは

データバインディングとはXAMLの強力なクラスの一つです。
バインドとは日本語で「縛る」という意味ですが、文字通りデータを縛るものです。
簡単に言うと、プロパティとプロパティを縛り付け、同期を取ることができます。

バインドがない場合

まず、2つのスライダーコントロールがある場合を考えてみましょう。

1

XAMLはこのようになります。

<Slider x:Name="slider1" HorizontalAlignment="Left" Margin="438,225,0,0" VerticalAlignment="Top" Width="328"/>
<Slider x:Name="slider2" HorizontalAlignment="Left" Margin="438,312,0,0" VerticalAlignment="Top" Width="328"/>

この2つのスライダーのValue値を常に同じにする(同期をとる)ような場合を考えてみましょう。

バインディングがない場合、このように片方のValueChangedイベントを取得してもう一つのスライダーの値に代入することで実現できます。

private void slider1_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
    this.slider2.Value = this.slider1.Value;
}

しかし、逆にslider2の値を変更してもslider1は変更されません。
また、コントロールの値の同期をとるのにいちいちC#コードを書いていてはめんどうです。

バインディングがある場合

バインディングがあるとこのような文でXAMLのみでデータの同期を取ることができます。

        <Slider x:Name="slider1" HorizontalAlignment="Left" Margin="438,225,0,0" VerticalAlignment="Top" Width="328" />
        <Slider x:Name="slider2" Value="{Binding ElementName=slider1,Path=Value,Mode=TwoWay}" HorizontalAlignment="Left" Margin="438,312,0,0" VerticalAlignment="Top" Width="328"/>

このようにコントロール間のデータの同期をとるというのがデータバインディングの役割の一つです。

XAMLとC#コードを分離する

バインディングにはもうひとつの目的があります。
それはXAML(ユーザーインターフェース)とC#(コードロジック)の分離を実現することにあります。

XAMLとC#は別の言語で別のファイルです。
C#で書いたコードはXAMLという言語で書かれたユーザーインターフェースでアプリの画面が作られるわけですが、C#コードをそのままに、別のXAMLユーザーインターフェースに適応することができればコードの再利用が可能となります。

このようにXAMLとC#、もっというとUIとコードロジックは分離されるべきです。
そのようなときにもバインディングは力を発揮します。

このようなクラスがあったとします。

public class Model
{
    public int Number { get; set; }
}

C#コードとのバインディングはDataContextプロパティを介して行われます。

コンストラクタで、先ほどのModelクラスをインスタンス化し、値をいれた状態でDataContextプロパテイに代入します。

Model model = new Model();
model.Number = 10;

this.DataContext = model;

XAMLはこのようにします。

<Slider x:Name="slider1" Value="{Binding Number}" HorizontalAlignment="Left" Margin="438,225,0,0" VerticalAlignment="Top" Width="328" />

こうするとSliderの値はModelクラスに入れた値と一致しています。

2

このようにXAMLのコントロールに直接代入しているわけではなく、クラス内のプロパティの名前さえ一致していればデータの同期が取れます。
こうすることでC#のコードとXAMLコードとの分離が可能となります。
これがデータバインディングのもう一つの目的です。

データバインディングは最終的にMVVMアーキテクチャを実現するにあたって必要不可欠な技術であり、XAMLとC#との完全分離が可能となるとコードの再利用が可能となります。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.