Freigeben über


Vorgehensweise: Steuern, wann der TextBox-Text die Quelle aktualisiert

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

Beispiel

Die TextBox.Text Eigenschaft hat einen Standardwert UpdateSourceTrigger von LostFocus. Dies bedeutet, wenn eine Anwendung über eine datengebundene TextBox-Eigenschaft verfügt, wird der Text, den Sie in das TextBox.Text-Feld eingeben, erst dann in der Quelle aktualisiert, wenn das TextBox den Fokus verliert (z. B. wenn Sie weg vom TextBox klicken).

Wenn die Quelle während der Eingabe aktualisiert werden soll, legen Sie die UpdateSourceTrigger Bindung auf PropertyChanged. Im folgenden Beispiel zeigen die hervorgehobenen Codezeilen, dass die Text Eigenschaften sowohl der TextBox als auch der TextBlock gleichen Quelleigenschaft gebunden sind. Die UpdateSourceTrigger-Eigenschaft der TextBox-Bindungseigenschaft wird auf PropertyChanged gesetzt.

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

Das führt dazu, dass der TextBlock denselben Text anzeigt (da sich die Quelle ändert), wenn der Benutzer Text in den TextBox eingibt, wie im folgenden Screenshot des Beispiels dargestellt.

Screenshot, der die einfache Datenbindung zeigt.

Wenn Sie über ein Dialogfeld oder ein vom Benutzer bearbeitbares Formular verfügen und die Quellaktualisierungen aufschieben möchten, bis der Benutzer die Bearbeitung der Felder abgeschlossen hat und auf "OK" klickt, können Sie den UpdateSourceTrigger-Wert Ihrer Bindungen auf Explicit setzen, wie im folgenden Beispiel:

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

Wenn Sie den UpdateSourceTrigger Wert auf Explicit"Wert" festlegen, ändert sich der Quellwert nur, wenn die Anwendung die UpdateSource Methode aufruft. Das folgende Beispiel zeigt, wie Sie UpdateSource für itemNameTextBox aufrufen können:

// 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 dieselbe Technik für Eigenschaften anderer Steuerelemente verwenden, beachten Sie jedoch, dass die meisten anderen Eigenschaften einen Standardwert UpdateSourceTrigger aufweisen PropertyChanged. Weitere Informationen finden Sie auf der UpdateSourceTrigger Eigenschaftenseite.

Hinweis

Die UpdateSourceTrigger Eigenschaft behandelt Quellaktualisierungen und ist daher nur für TwoWay Bindungen oder OneWayToSource Bindungen relevant. Damit TwoWay- und OneWayToSource-Bindungen funktionieren, muss das Quellobjekt Benachrichtigungen über Eigenschaftenänderungen bereitstellen. Weitere Informationen finden Sie in den in diesem Thema zitierten Beispielen. Darüber hinaus können Sie sich die Implementierung von Eigenschaftsänderungsbenachrichtigungen ansehen.

Siehe auch