Lire en anglais

Partager via


Guide pratique pour contrôler quand le texte textuel TextBox met à jour la source

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

Exemple

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

Si vous souhaitez que la source soit mise à jour à mesure que vous tapez, définissez la UpdateSourceTrigger de la liaison sur PropertyChanged. Dans l’exemple suivant, les lignes de code en surbrillance montrent que les propriétés Text des TextBox et des TextBlock sont liées à la même propriété source. La propriété UpdateSourceTrigger de la liaison TextBox est définie sur PropertyChanged.

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

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

Si vous avez une boîte de dialogue ou 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 cliquez sur « OK », vous pouvez définir la valeur UpdateSourceTrigger de vos liaisons sur Explicit, comme dans l’exemple suivant :

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

Lorsque vous définissez la valeur UpdateSourceTrigger sur Explicit, la valeur source change uniquement lorsque l’application appelle la méthode UpdateSource. L’exemple suivant montre comment appeler UpdateSource pour itemNameTextBox:

C#
// itemNameTextBox is an instance of a TextBox
BindingExpression be = itemNameTextBox.GetBindingExpression(TextBox.TextProperty);
be.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 propriétés ont une valeur par défaut UpdateSourceTrigger de PropertyChanged. Pour obtenir des informations supplémentaires, consultez la page de propriétés UpdateSourceTrigger.

Notes

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

Voir aussi