Condividi tramite


Procedura: controllare il momento in cui il database di origine viene aggiornato dal testo di TextBox

In questo argomento viene descritto come utilizzare la UpdateSourceTrigger proprietà per controllare la tempistica degli aggiornamenti dell'origine di associazione. L'argomento usa il TextBox controllo come esempio.

Esempio

La TextBox.Text proprietà ha un valore predefinito UpdateSourceTrigger di LostFocus. Ciò significa che se un'applicazione ha una TextBox proprietà associata a TextBox.Text dati, il testo digitato in TextBox non aggiorna l'origine fino a quando non perde lo TextBox stato attivo (ad esempio, quando si fa clic lontano da TextBox).

Se si desidera aggiornare l'origine durante la digitazione, impostare l'oggetto dell'associazione UpdateSourceTrigger su PropertyChanged. Nell'esempio seguente le righe di codice evidenziate mostrano che le Text proprietà di TextBox e TextBlock sono associate alla stessa proprietà di origine. La UpdateSourceTrigger proprietà dell'associazione TextBox è impostata su 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>

Di conseguenza, TextBlock mostra lo stesso testo (perché l'origine cambia) dell'utente immette testo in TextBox, come illustrato nello screenshot seguente dell'esempio:

Screenshot that shows simple data binding.

Se si dispone di una finestra di dialogo o di un modulo modificabile dall'utente e si desidera rinviare gli aggiornamenti di origine fino al termine della modifica dei campi e fare clic su "OK", è possibile impostare il UpdateSourceTrigger valore delle associazioni su Explicit, come nell'esempio seguente:

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

Quando si imposta il UpdateSourceTrigger valore su Explicit, il valore di origine cambia solo quando l'applicazione chiama il UpdateSource metodo . Nell'esempio seguente viene illustrato come chiamare UpdateSource per 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

È possibile usare la stessa tecnica per le proprietà di altri controlli, ma tenere presente che la maggior parte delle altre proprietà ha un valore predefinito UpdateSourceTrigger .PropertyChanged Per altre informazioni, vedere la pagina delle UpdateSourceTrigger proprietà.

Nota

La UpdateSourceTrigger proprietà gestisce gli aggiornamenti di origine e pertanto è rilevante solo per TwoWay le associazioni o OneWayToSource . Per TwoWay il funzionamento delle associazioni e OneWayToSource , l'oggetto di origine deve fornire notifiche di modifica delle proprietà. Per altre informazioni, è possibile fare riferimento agli esempi citati in questo argomento. È anche possibile esaminare Implementare la notifica di modifiche alle proprietà.

Vedi anche