方法: TextBox テキストでソースを更新するタイミングを制御するHow to: Control When the TextBox Text Updates the Source

このトピックでは、使用する方法を説明します、UpdateSourceTriggerプロパティ バインディングのソースの更新のタイミングを制御するためです。This topic describes how to use the UpdateSourceTrigger property to control the timing of binding source updates. トピックを使用して、TextBoxなどのコントロール。The topic uses the TextBox control as an example.

Example

TextBox.TextThe TextBox.Text プロパティは、既定値を持つUpdateSourceTrigger@propertyLostFocusします。property has a default UpdateSourceTrigger value of LostFocus. つまり、アプリケーション、TextBoxデータ バインドでTextBoxします。TextThis means if an application has a TextBox with a data-bound TextBox.Text 入力したテキスト、プロパティ、TextBoxまでソースを更新できません、TextBoxがフォーカスを失った (からクリックすると、たとえば、 TextBox)。property, the text you type into the TextBox does not update the source until the TextBox loses focus (for instance, when you click away from the TextBox).

ソースの入力を更新する場合は、設定、UpdateSourceTriggerへのバインドのPropertyChangedします。If you want the source to be updated as you type, set the UpdateSourceTrigger of the binding to PropertyChanged. 次の例で強調表示された行のコードを表示する、Text両方のプロパティ、 TextBoxTextBlock同じソース プロパティにバインドされます。In the following example, the highlighted lines of code show that the Text properties of both the TextBox and the TextBlock are bound to the same source property. UpdateSourceTriggerのプロパティ、TextBoxにバインディングが設定されているPropertyChangedします。The UpdateSourceTrigger property of the TextBox binding is set to 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サンプルの次のスクリーン ショットに示しますように。As a result, the TextBlock shows the same text (because the source changes) as the user enters text into the TextBox, as illustrated by the following screenshot of the sample:

単純データ バインディングを示すスクリーン ショット。

ダイアログまたはユーザーが編集できるフォームがあると、ユーザーがフィールドの編集が完了し、[OK] をクリックするまで、ソースの更新プログラムを延期する場合、設定することができる場合、UpdateSourceTriggerに、バインディングのExplicit、次の例。If you have a dialog or a user-editable form and you want to defer source updates until the user is finished editing the fields and clicks "OK", you can set the UpdateSourceTrigger value of your bindings to Explicit, as in the following example:

<TextBox Name="itemNameTextBox"
         Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />

設定すると、UpdateSourceTrigger値をExplicit、アプリケーションを呼び出すときにのみソース値が変更、UpdateSourceメソッド。When you set the UpdateSourceTrigger value to Explicit, the source value only changes when the application calls the UpdateSource method. 次の例は、呼び出す方法を示していますUpdateSourceitemNameTextBox:。The following example shows how to call UpdateSource for itemNameTextBox:

// 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()

注意

他のコントロールのプロパティの同じ手法を使用できますが、既定値をその他のほとんどのプロパティがあることに注意してくださいUpdateSourceTrigger@propertyPropertyChangedします。You can use the same technique for properties of other controls, but keep in mind that most other properties have a default UpdateSourceTrigger value of PropertyChanged. 詳細については、次を参照してください。、UpdateSourceTriggerプロパティ ページ。For more information, see the UpdateSourceTrigger property page.

注意

UpdateSourceTriggerプロパティ ソースの更新処理であるため、関連するのみTwoWayまたはOneWayToSourceバインドします。The UpdateSourceTrigger property deals with source updates and therefore is only relevant for TwoWay or OneWayToSource bindings. TwoWayOneWayToSourceするには、プロパティ変更通知を提供するソース オブジェクトのニーズへのバインド。For TwoWay and OneWayToSource bindings to work, the source object needs to provide property change notifications. 詳しくは、このトピック内にあるサンプルをご覧ください。You can refer to the samples cited in this topic for more information. また、「方法 : プロパティの変更通知を実装する」もご覧ください。In addition, you can look at Implement Property Change Notification.

関連項目See also