Procédure : Contrôler quand le texte TextBox met à jour la sourceHow to: Control When the TextBox Text Updates the Source

Cette rubrique explique comment utiliser la UpdateSourceTrigger propriété pour contrôler le minutage des mises à jour de la source de liaison.This topic describes how to use the UpdateSourceTrigger property to control the timing of binding source updates. La rubrique utilise le TextBox contrôle comme exemple.The topic uses the TextBox control as an example.

ExemplesExample

L’élément de langage TextBox.TextThe TextBox.Text la propriété a la UpdateSourceTrigger LostFocusvaleur par défaut.property has a default UpdateSourceTrigger value of LostFocus. Cela signifie que si une application a TextBox un avec un lié aux TextBoxdonnées.TextThis means if an application has a TextBox with a data-bound TextBox.Text , le texte que vous tapez dans le TextBox ne met pas à jour la source TextBox tant que le ne perd le focus (par exemple, lorsque TextBoxvous cliquez en dehors du).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).

Si vous souhaitez que la source soit mise à jour au fur et à UpdateSourceTrigger mesure que vous tapez PropertyChanged, affectez la valeur à la de la liaison.If you want the source to be updated as you type, set the UpdateSourceTrigger of the binding to PropertyChanged. Dans l’exemple suivant, les lignes de code en surbrillance Text indiquent que les propriétés TextBox de et TextBlock de sont liées à la même propriété source.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. La UpdateSourceTrigger propriété de la TextBox liaison a la valeur 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>

En conséquence, le TextBlock affiche le même texte (car la source change) lorsque l’utilisateur entre du texte dans le TextBox, comme illustré dans la capture d’écran suivante de l’exemple: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:

Capture d’écran montrant une liaison de données simple.

Si vous disposez d’une boîte de dialogue ou d’un formulaire modifiable par l’utilisateur et que vous souhaitez différer les mises à jour de la source jusqu’à ce que l’utilisateur ait fini UpdateSourceTrigger de modifier les champs et clique sur «OK», vous pouvez définir la valeur de vos liaisons sur Explicit, comme dans l’exemple suivant: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}" />

Lorsque vous affectez UpdateSourceTrigger la valeur Explicità, la valeur source change uniquement quand l’application appelle UpdateSource la méthode.When you set the UpdateSourceTrigger value to Explicit, the source value only changes when the application calls the UpdateSource method. L’exemple suivant montre comment appeler UpdateSource pour: itemNameTextBoxThe 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()

Notes

Vous pouvez utiliser la même technique pour les propriétés d’autres contrôles, mais gardez à l’esprit que la plupart des autres UpdateSourceTrigger propriétés ont PropertyChangedla valeur par défaut.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. Pour plus d’informations, consultez UpdateSourceTrigger la page de propriétés.For more information, see the UpdateSourceTrigger property page.

Notes

La UpdateSourceTrigger propriété traite les mises à jour de la source et ne concerne donc TwoWay que OneWayToSource les liaisons ou.The UpdateSourceTrigger property deals with source updates and therefore is only relevant for TwoWay or OneWayToSource bindings. Pour TwoWay que OneWayToSource les liaisons et fonctionnent, l’objet source doit fournir des notifications de modification de propriété.For TwoWay and OneWayToSource bindings to work, the source object needs to provide property change notifications. Vous pouvez consulter les exemples figurant dans cette rubrique pour plus d’informations.You can refer to the samples cited in this topic for more information. Vous pouvez également consulter la page Implémenter la notification des modifications de propriétés.In addition, you can look at Implement Property Change Notification.

Voir aussiSee also