Partilhar via


Como controlar quando o texto textBox atualiza a origem

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

Exemplo

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

Se você quiser que a origem seja atualizada conforme você digita, defina o UpdateSourceTrigger da associação como PropertyChanged. No exemplo a seguir, as linhas de código realçadas mostram que as propriedades Text do TextBox e do TextBlock estão associadas à mesma propriedade de origem. A propriedade UpdateSourceTrigger da associação TextBox está 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 que é inserido pelo usuário no TextBox, devido à alteração da origem, 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 desejar adiar as atualizações de origem até que o usuário termine de editar os campos e clique em "OK", poderá definir o valor UpdateSourceTrigger de suas associações para Explicit, como no exemplo a seguir:

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

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

Nota

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 de propriedades UpdateSourceTrigger.

Nota

A propriedade UpdateSourceTrigger lida com atualizações de origem e, portanto, só é relevante para associações de TwoWay ou OneWayToSource. Para que as associaçõ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 Implementar Notificação de Alteração de Propriedade.

Consulte também

  • tópicos de instruções