Vorgehensweise: Steuern, wann der TextBox-Text die Quelle aktualisiertHow to: Control When the TextBox Text Updates the Source

In diesem Thema wird beschrieben, wie Sie mit der UpdateSourceTrigger Eigenschaft, um Aktualisierungen von Bindungsquellen zeitlich steuern.This topic describes how to use the UpdateSourceTrigger property to control the timing of binding source updates. In diesem Thema wird die TextBox Steuerelement als Beispiel.The topic uses the TextBox control as an example.

BeispielExample

Das Sprachelement TextBox.TextThe TextBox.Text Eigenschaft hat den Standardwert UpdateSourceTrigger Wert LostFocus.property has a default UpdateSourceTrigger value of LostFocus. Dies bedeutet, wenn eine Anwendung eine TextBox mit einem datengebundenen TextBox.TextThis means if an application has a TextBox with a data-bound TextBox.Text Eigenschaft, die den Text, die Sie eingeben, die TextBox aktualisiert nicht die Quelle erst die TextBox den Fokus verliert (z. B. beim Klicken auf aus der 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).

Wenn die Quelle aktualisiert werden, während der Eingabe werden sollen, legen Sie die UpdateSourceTrigger zur Bindung mit PropertyChanged.If you want the source to be updated as you type, set the UpdateSourceTrigger of the binding to PropertyChanged. Im folgenden Beispiel zeigen die hervorgehobenen Codezeilen, die die Text Eigenschaften sowohl die TextBox und TextBlock an die gleiche Quelleneigenschaft gebunden sind.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. Die UpdateSourceTrigger Eigenschaft der TextBox Bindung nastaven NA hodnotu 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>

Daher die TextBlock zeigt denselben Text (da die Quelle ändert), wenn der Benutzer Text in die TextBox, wie im folgenden Screenshot des Beispiels veranschaulicht: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:

Screenshot mit einfache Datenbindung.

Wenn Sie ein Dialogfeld oder eine vom Benutzer bearbeitbaren Formular und quellenaktualisierungen zu verzögern, bis der Benutzer die Felder bearbeiten abgeschlossen ist, und klickt auf "OK" werden sollen, Sie können festlegen, die UpdateSourceTrigger -Wert Ihrer Bindungen auf Explicit, wie im folgenden Beispiel: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}" />

Beim Festlegen der UpdateSourceTrigger Wert Explicit, der Quellwert nur geändert werden, wenn die Anwendung aufruft der UpdateSource Methode.When you set the UpdateSourceTrigger value to Explicit, the source value only changes when the application calls the UpdateSource method. Das folgende Beispiel zeigt das Aufrufen von UpdateSource für itemNameTextBox: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()

Hinweis

Sie können das gleiche Verfahren für Eigenschaften anderer Steuerelemente verwenden, aber denken Sie daran, dass die meisten anderen Eigenschaften einen Standardwert verfügen UpdateSourceTrigger Wert PropertyChanged.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. Weitere Informationen finden Sie unter den UpdateSourceTrigger Eigenschaftenseite.For more information, see the UpdateSourceTrigger property page.

Hinweis

Die UpdateSourceTrigger -Eigenschaft behandelt Quellupdates und ist daher nur relevant, für TwoWay oder OneWayToSource Bindungen.The UpdateSourceTrigger property deals with source updates and therefore is only relevant for TwoWay or OneWayToSource bindings. Für TwoWay und OneWayToSource -Bindung funktionieren, muss das Quellobjekt Benachrichtigungen für Eigenschaftenänderung bereitstellen.For TwoWay and OneWayToSource bindings to work, the source object needs to provide property change notifications. Weitere Informationen finden Sie in den Beispielen in diesem Thema.You can refer to the samples cited in this topic for more information. Zusätzliche Informationen können Sie auch dem Dokument Implementieren von Benachrichtigungen bei Eigenschaftenänderungen entnehmen.In addition, you can look at Implement Property Change Notification.

Siehe auchSee also