Postupy: Určení, kdy dojde k aktualizaci textu TextBox ve zdroji

Toto téma popisuje, jak pomocí UpdateSourceTrigger vlastnosti řídit časování aktualizací zdroje vazby. Toto téma používá TextBox ovládací prvek jako příklad.

Příklad

Vlastnost TextBox.Text má výchozí UpdateSourceTrigger hodnotu LostFocus. To znamená, že pokud má TextBox aplikace vlastnost svázanou TextBox.Text s daty, text, který zadáte do TextBox zdroje, neaktualizuje zdroj, dokud TextBox neztratí fokus (například když kliknete mimo TextBox).

Pokud chcete, aby se zdroj aktualizoval při psaní, nastavte UpdateSourceTrigger vazbu na PropertyChanged. V následujícím příkladu zvýrazněné řádky kódu ukazují, že Text vlastnosti TextBox obou objektů i vlastnosti TextBlock jsou vázány na stejnou zdroj vlastnost. Vlastnost UpdateSourceTrigger vazby TextBox je nastavena na 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>

V důsledku toho se TextBlock zobrazí stejný text (protože se zdroj změní) jako uživatel zadá text do ukázky TextBox, jak je znázorněno na následujícím snímku obrazovky ukázky:

Screenshot that shows simple data binding.

Pokud máte dialogové okno nebo formulář upravitelný uživatelem a chcete odložit aktualizace zdroje, dokud uživatel nedokončí úpravy polí a klikne na OK, můžete nastavit UpdateSourceTrigger hodnotu vazeb tak Explicit, jak je znázorněno v následujícím příkladu:

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

Když nastavíte UpdateSourceTrigger hodnotu na Explicit, zdrojová hodnota se změní pouze v případě, že aplikace volá metodu UpdateSource . Následující příklad ukazuje, jak volat UpdateSourceitemNameTextBox:

// 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()

Poznámka

Stejnou techniku můžete použít pro vlastnosti jiných ovládacích prvků, ale mějte na paměti, že většina ostatních vlastností má výchozí UpdateSourceTrigger hodnotu PropertyChanged. Další informace najdete na UpdateSourceTrigger stránce vlastností.

Poznámka

Vlastnost UpdateSourceTrigger se zabývá aktualizacemi zdroje, a proto je relevantní pouze pro TwoWay nebo OneWayToSource vazby. Aby TwoWay zdrojový objekt fungoval, OneWayToSource musí zdrojový objekt poskytovat oznámení o změnách vlastností. Další informace najdete v ukázkách uvedených v tomto tématu. Kromě toho se můžete podívat na implementovat oznámení o změně vlastnosti.

Viz také