Procedura: Controllare quando il testo della TextBox aggiorna l'origine
In questo argomento viene descritto come utilizzare la proprietà UpdateSourceTrigger per controllare la tempistica degli aggiornamenti della fonte di associazione. L'argomento usa il controllo TextBox come esempio.
Esempio
La proprietà TextBox.Text ha un valore UpdateSourceTrigger predefinito di LostFocus. Ciò significa che se un'applicazione ha un TextBox con una proprietà TextBox.Text associata a dati, il testo che digiti nel TextBox non aggiorna la sorgente finché il TextBox non perde il fuoco, ad esempio quando fai clic fuori dal TextBox.
Se si desidera aggiornare l'origine in tempo reale durante la digitazione, impostare il UpdateSourceTrigger del collegamento su PropertyChanged. Nell'esempio seguente, le righe di codice evidenziate mostrano che le proprietà Text
sia del TextBox che del TextBlock sono associate alla stessa proprietà di origine. La proprietà UpdateSourceTrigger 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, il TextBlock mostra lo stesso testo (anche se l'origine cambia) mentre l'utente immette il testo nel TextBox, come illustrato nello screenshot dell'esempio seguente.
Se hai una finestra di dialogo o un modulo modificabile dall'utente e desideri posticipare gli aggiornamenti della fonte fino a quando l'utente non ha finito di modificare i campi e preme "OK", puoi impostare il valore UpdateSourceTrigger dei tuoi collegamenti su Explicit, come nell'esempio seguente:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
Quando si imposta il valore UpdateSourceTrigger su Explicit, il valore di origine cambia solo quando l'applicazione chiama il metodo UpdateSource. 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 di PropertyChanged. Per ulteriori informazioni, vedere la pagina della proprietà UpdateSourceTrigger.
Nota
La proprietà UpdateSourceTrigger gestisce gli aggiornamenti della sorgente e pertanto è rilevante solo per le associazioni TwoWay o OneWayToSource. Per il funzionamento delle associazioni TwoWay e OneWayToSource, l'oggetto di origine deve fornire notifiche di modifica delle proprietà. Per altre informazioni, vedere gli esempi citati in questo argomento. È anche possibile esaminare Implementare la notifica delle modifiche delle proprietà.
Vedere anche
.NET Desktop feedback