Freigeben über


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

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

Beispiel

Die TextBox.Text-Eigenschaft weist einen Standard-UpdateSourceTrigger Wert von LostFocusauf. Dies bedeutet, wenn eine Anwendung über eine TextBox mit einer datengebundenen TextBox.Text-Eigenschaft verfügt, der Text, den Sie in die TextBox eingeben, die Quelle erst aktualisiert, wenn die TextBox den Fokus verliert (z. B. wenn Sie vom TextBoxweg klicken).

Wenn die Quelle während der Eingabe aktualisiert werden soll, setzen Sie den UpdateSourceTrigger der Bindung auf PropertyChanged. Im folgenden Beispiel zeigen die hervorgehobenen Codezeilen, dass die Text Eigenschaften der TextBox und der TextBlock an dieselbe Quelleigenschaft gebunden sind. Die Eigenschaft UpdateSourceTrigger der Bindung TextBox 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>

Daher zeigt die TextBlock denselben Text (da sich die Quelle ändert) wie der Benutzer Text in die TextBoxeingibt, wie im folgenden Screenshot des Beispiels dargestellt:

Screenshot, der eine einfache Datenbindung zeigt.

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

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

Wenn Sie den UpdateSourceTrigger Wert auf Explicitfestlegen, ändert sich der Quellwert nur, wenn die Anwendung die UpdateSource-Methode aufruft. Das folgende Beispiel zeigt, wie sie UpdateSource für itemNameTextBoxaufrufen:

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

Anmerkung

Sie können dieselbe Technik für Eigenschaften anderer Steuerelemente verwenden, beachten Sie jedoch, dass die meisten anderen Eigenschaften einen Standard-UpdateSourceTrigger Wert von PropertyChangedaufweisen. Weitere Informationen finden Sie auf der Eigenschaftenseite UpdateSourceTrigger.

Anmerkung

Die UpdateSourceTrigger-Eigenschaft behandelt Quellaktualisierungen und ist daher nur für TwoWay oder OneWayToSource Bindungen relevant. Damit Bindungen von TwoWay und OneWayToSource funktionieren, muss das Quellobjekt Änderungsmitteilungen für Eigenschaften auslösen. Weitere Informationen finden Sie in den in diesem Thema zitierten Beispielen. Darüber hinaus können Sie sich Implementieren von Eigenschaftsänderungsbenachrichtigungenansehen.

Siehe auch