方法: TextBox テキストでソースを更新するタイミングを制御する
このトピックでは、UpdateSourceTrigger プロパティを使用して、バインディング ソースの更新のタイミングを制御する方法について説明します。 このトピックでは、例として TextBox コントロールを使用します。
例
TextBox.Text プロパティの UpdateSourceTrigger の既定値は LostFocus です。 つまり、アプリケーションにデータ バインドされた TextBox.Text プロパティを持つ TextBox がある場合、TextBox がフォーカスを失うまで (たとえば、TextBox からクリックして移動したとき)、TextBox に入力したテキストでソースは更新されません。
入力したらソースが更新されるようにしたい場合は、バインディングの UpdateSourceTrigger を PropertyChanged に設定します。 次の例の強調表示されているコード行は、TextBox と TextBlock 両方の Text
プロパティが、同じソース プロパティにバインドされていることを示します。 TextBox バインディングの UpdateSourceTrigger プロパティは、PropertyChanged に設定されています。
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:SDKSample"
xmlns:system="clr-namespace:System;assembly=mscorlib"
SizeToContent="WidthAndHeight"
Title="Simple Data Binding Sample">
<Window.Resources>
<ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type src:Person}">
<ObjectDataProvider.ConstructorParameters>
<system:String>Joe</system:String>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
<Style TargetType="{x:Type Label}">
<Setter Property="DockPanel.Dock" Value="Top"/>
<Setter Property="FontSize" Value="12"/>
</Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="25"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Width" Value="100"/>
<Setter Property="Height" Value="25"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
</Window.Resources>
<Border Margin="25" BorderBrush="Aqua" BorderThickness="3" Padding="8">
<DockPanel Width="200" Height="100">
<Label>Enter a Name:</Label>
<TextBox>
<TextBox.Text>
<Binding Source="{StaticResource myDataSource}" Path="Name"
UpdateSourceTrigger="PropertyChanged"/>
</TextBox.Text>
</TextBox>
<Label>The name you entered:</Label>
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>
</DockPanel>
</Border>
</Window>
結果として、次のスクリーンショットの例に示すように、TextBlock には、ユーザーが TextBox に入力したのと同じテキストが表示されます (ソースが変更されるため)。
ダイアログまたはユーザーが編集できるフォームがあり、ユーザーがフィールドの編集を終えて [OK] をクリックするまでソースの更新を遅延させる場合は、次の例のように、バインディングの UpdateSourceTrigger の値を Explicit に設定します。
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
UpdateSourceTrigger の値を Explicit に設定すると、ソースの値は、アプリケーションで UpdateSource メソッドが呼び出された場合にのみ変更されます。 次の例では、itemNameTextBox
に対して UpdateSource を呼び出す方法を示します。
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.UpdateSource();
Me.itemNameTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
Me.bidPriceTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
注意
他のコントロールのプロパティにも同じ手法を使用できますが、他のほとんどのプロパティでは PropertyChanged の既定値が UpdateSourceTrigger であることに注意してください。 詳細については、UpdateSourceTrigger プロパティのページを参照してください。
注意
UpdateSourceTrigger プロパティではソースの更新が処理されるため、このプロパティは TwoWay または OneWayToSource のバインディングにのみ関連します。 TwoWay および OneWayToSource のバインディングを機能させるには、ソース オブジェクトでプロパティ変更通知を提供する必要があります。 詳しくは、このトピック内にあるサンプルをご覧ください。 また、「方法 : プロパティの変更通知を実装する」もご覧ください。
関連項目
.NET Desktop feedback