Compartilhar via


Como controlar quando o texto do TextBox atualiza a fonte de dados

Este tópico descreve como usar a UpdateSourceTrigger propriedade para controlar o tempo de vinculação de atualizações de origem. O tópico usa o TextBox controle como exemplo.

Exemplo

A TextBox.Text propriedade tem um valor padrão UpdateSourceTrigger de LostFocus. Isso significa que, se um aplicativo tiver uma TextBox com uma propriedade de TextBox.Text vinculada a dados, o texto que você digitar na TextBox não atualizará a origem até que a TextBox perca o foco (por exemplo, quando você clica fora da TextBox).

Se você quiser que a origem seja atualizada conforme você digita, defina a UpdateSourceTrigger associação como PropertyChanged. No exemplo a seguir, as linhas de código realçadas mostram que as Text propriedades de ambos TextBox e as TextBlock estão associadas à mesma propriedade de origem. A UpdateSourceTrigger propriedade da associação TextBox é definida como 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>

Como resultado, o TextBlock mostra o mesmo texto (porque a fonte é alterada) enquanto o usuário insere texto no TextBox, conforme ilustrado pela seguinte captura de tela do exemplo.

Captura de tela que mostra a associação de dados simples.

Se você tiver uma caixa de diálogo ou um formulário editável pelo usuário e quiser adiar as atualizações de origem até que o usuário termine de editar os campos e clique em "OK", poderá definir o UpdateSourceTrigger valor de suas associações como Explicit, como no exemplo a seguir:

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

Quando você define o UpdateSourceTrigger valor como Explicit, o valor de origem só é alterado quando o aplicativo chama o UpdateSource método. O exemplo a seguir mostra como chamar UpdateSource para 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()

Observação

Você pode usar a mesma técnica para propriedades de outros controles, mas tenha em mente que a maioria das outras propriedades tem um valor padrão UpdateSourceTrigger de PropertyChanged. Para obter mais informações, consulte a página da propriedade UpdateSourceTrigger.

Observação

A propriedade UpdateSourceTrigger lida com atualizações de origem e, portanto, é relevante apenas para associações TwoWay ou OneWayToSource. Para que as vinculações TwoWay e OneWayToSource funcionem, o objeto de origem precisa fornecer notificações de alteração de propriedade. Você pode consultar os exemplos citados neste tópico para obter mais informações. Além disso, você pode examinar a Notificação de Alteração de Propriedade de Implementação.

Consulte também