Comment : contrôler quand le texte TextBox met à jour la source

Cette rubrique explique comment utiliser la UpdateSourceTrigger propriété pour contrôler le minutage des mises à jour sources de liaison. La rubrique utilise le TextBox contrôle comme exemple.

Exemple

La TextBox.Text propriété a la valeur LostFocuspar défaut UpdateSourceTrigger . Cela signifie que si une application a une TextBox propriété liée aux TextBox.Text données, le texte que vous tapez dans la TextBox source ne met pas à jour la source tant que le TextBox focus n’est pas perdu (par exemple, lorsque vous cliquez à l’écart de la source TextBox).

Si vous souhaitez que la source soit mise à jour à mesure que vous tapez, définissez la UpdateSourceTrigger liaison PropertyChangedsur . Dans l’exemple suivant, les lignes de code mises en surbrillance montrent que les Text propriétés des TextBox deux et celles-ci TextBlock sont liées à la même propriété source. La UpdateSourceTrigger propriété de la TextBox liaison est définie sur 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>

Par conséquent, le TextBlock texte affiche le même texte (car la source change) que l’utilisateur entre dans le TextBoxtexte, comme illustré par la capture d’écran suivante de l’exemple :

Screenshot that shows simple data binding.

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 sources jusqu’à ce que l’utilisateur ait terminé de modifier les champs et clique sur « OK », vous pouvez définir la UpdateSourceTrigger valeur de vos liaisons Explicit, comme dans l’exemple suivant :

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

Lorsque vous définissez la UpdateSourceTrigger valeur Explicitsur , la valeur source change uniquement lorsque l’application appelle la UpdateSource méthode. L’exemple suivant montre comment appeler UpdateSource :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()

Remarque

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 propriétés ont une valeur PropertyChangedpar défaut UpdateSourceTrigger . Pour plus d’informations, consultez la page de UpdateSourceTrigger propriétés.

Remarque

La UpdateSourceTrigger propriété traite des mises à jour sources et n’est donc pertinente que pour ou OneWayToSource les TwoWay liaisons. Pour TwoWay que les OneWayToSource liaisons fonctionnent, l’objet source doit fournir des notifications de modification de propriété. Vous pouvez consulter les exemples figurant dans cette rubrique pour plus d’informations. Vous pouvez également consulter la page Implémenter la notification des modifications de propriétés.

Voir aussi