Gewusst wie: Steuern, wann der TextBox-Text die Quelle aktualisiert

In diesem Thema wird beschrieben, wie Sie die UpdateSourceTrigger-Eigenschaft verwenden, um das Timing von Aktualisierungen der Bindungsquelle zu steuern. Das Thema verwendet das TextBox-Steuerelement als Beispiel.

Beispiel

Die TextBox.Text-Eigenschaft weist einen Standard-UpdateSourceTrigger-Wert von LostFocus auf. Das bedeutet, dass bei einer Anwendung mit TextBox mit einer datengebundenen TextBox.Text-Eigenschaft der Text, den Sie in das TextBox eingeben, die Quelle erst dann aktualisiert wird, wenn das TextBox den Fokus verliert (z. B. wenn Sie vom TextBox wegklicken).

Wenn Sie möchten, dass die Quelle während der Eingabe aktualisiert wird, setzen Sie den UpdateSourceTrigger der Bindung auf PropertyChanged. Im folgenden Beispiel zeigen die hervorgehobenen Codezeilen, dass die Eigenschaften sowohl TextTextBox der als auch der TextBlock gleichen Quelleigenschaft gebunden sind. Die UpdateSourceTrigger Eigenschaft der TextBox Bindung wird auf PropertyChangedfestgelegt.

<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>

Dadurch zeigt das TextBlock-Element (aufgrund der Änderungen in der Quelle) den gleichen Text an, den der Benutzer in das TextBox-Element eingibt. Dies wird durch das folgende Bildschirmfoto des Beispiels veranschaulicht:

Screenshot that shows simple data binding.

Wenn Sie mit einem Dialogfeld oder einem vom Benutzer bearbeitbaren Formular arbeiten und Sie die Aktualisierungen der Quelle auf den Zeitpunkt verschieben möchten, zu dem der Benutzer die Bearbeitung der Felder abgeschlossen und auf "OK" geklickt hat, können Sie den UpdateSourceTrigger-Wert Ihrer Bindungen auf Explicit festlegen, wie im folgenden Beispiel gezeigt:

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

Wenn Sie den UpdateSourceTrigger-Wert auf Explicit setzen, ändert sich der Quellwert nur, wenn die Anwendung die UpdateSource-Methode aufruft. Im folgenden Beispiel wird veranschaulicht, wie UpdateSource für itemNameTextBox aufgerufen wird.

// 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 die gleiche Technik für Eigenschaften anderer Steuerelemente verwenden, aber bedenken Sie, dass die meisten anderen Eigenschaften einen Standard-UpdateSourceTrigger-Wert von PropertyChanged haben. Weitere Informationen finden Sie in den Ausführungen zur UpdateSourceTrigger-Eigenschaftsseite.

Hinweis

Die UpdateSourceTrigger-Eigenschaft bezieht sich auf Quellaktualisierungen und ist daher nur für TwoWay- oder OneWayToSource-Bindungen relevant. Damit TwoWay- und OneWayToSource-Bindungen funktionieren, muss das Quellobjekt Benachrichtigungen über Eigenschaftsänderungen bereitstellen. Weitere Informationen finden Sie in den Beispielen in diesem Thema. Zusätzliche Informationen können Sie auch dem Dokument Implementieren von Benachrichtigungen bei Eigenschaftenänderungen entnehmen.

Siehe auch