WPF_データバインディング

Bindingマークアップ拡張

バインディングは、ターゲットのプロパティにバインディング用のXAMLマークアップ拡張を埋め込みます。

Bindingマークアップ拡張にはさまざまなプロパティがあり、データ・バインディングの挙動を細かく設定することができます。


{Binding Path=SourcePropertyName}

なお、下記のようにPathプロパティは省略形で書くことができます。


{Binding SourcePropertyName}

Modeプロパティ

Modeプロパティは、データ・バインディングの向きとタイミングを指定できます。

OneTime UI要素生成時に一度だけ、ソース・プロパティの値を読み出してターゲット・プロパティに与える。
OneWay ソース・プロパティが変更された際に、ターゲット・プロパティに変更を反映される(ターゲットの変更は無視)。
OneWayToSource ターゲット・プロパティが変更された際に、ソース・プロパティに変更を反映される。
TwoWay ソース・プロパティとターゲット・プロパティの双方の変更が反映される。

UpdateSourceTriggerプロパティ

ModeプロパティでTwoWayやOneWayToSourceを指定した際には、変更をソース・プロパティに反映させるタイミングをUpdateSourceTriggerプロパティで指定できます

Default バインディング・ターゲットの依存関係プロパティのメタデータに基づいてタイミングを決定する。
PropertyChanged バインディング・ターゲットの値が変化する毎に変更を通知する。
LostFocus バインディング・ターゲットの要素がフォーカスを失うたびに変更を通知する。
Explicit 明示的にUpdateSourceメソッドを呼び出した場合にのみ変更を通知する。

単純バインディング

xamlファイルのみでバインディング動作を確認できます。

テキストボックスのバインディング


<Window x:Class="WpfDevelop.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="280" Width="320">
    <Grid Background="DarkGray">
        <Grid.RowDefinitions>
            <RowDefinition Height="2*"/>
            <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
        <TextBlock FontSize="18pt" Grid.Row="0" Margin="1" Text="{Binding ElementName=textBox, Path=Text}"/>
        <TextBox Name="textBox" Grid.Row="1" Margin="1" FontSize="18pt" Text="テキストを入力してください"/>
    </Grid>
</Window>

スライダーのバインディング


<Window x:Class="WpfDevelop.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="280" Width="320">
    <StackPanel VerticalAlignment="Center">
        <Slider Name="slider1" Width="200"/>
        <TextBox Width="80" Text="{Binding ElementName=slider1, Path=Value}"/>
    </StackPanel>
</Window>

関連ページ