Instrukcje: kontrolowanie, kiedy tekst TextBox aktualizuje źródło
W tym temacie opisano sposób używania właściwości UpdateSourceTrigger w celu kontrolowania momentu aktualizacji źródła powiązania. W tym temacie użyto kontrolki TextBox jako przykładu.
Przykład
Właściwość TextBox.Text ma domyślną wartość UpdateSourceTriggerLostFocus. Oznacza to, że jeśli aplikacja ma TextBox z właściwością TextBox.Text powiązaną z danymi, tekst, który wpisujesz w TextBox, nie aktualizuje źródła, dopóki TextBox nie utraci fokusu (na przykład po kliknięciu poza TextBox).
Jeśli chcesz zaktualizować źródło podczas wpisywania, ustaw UpdateSourceTrigger powiązania na wartość PropertyChanged. W poniższym przykładzie wyróżnione wiersze kodu pokazują, że właściwości Text
zarówno TextBox, jak i TextBlock są powiązane z tą samą właściwością źródłową. Właściwość UpdateSourceTrigger powiązania TextBox jest ustawiona na wartość 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>
W związku z tym TextBlock pokazuje ten sam tekst (ponieważ źródło się zmienia), ponieważ użytkownik wprowadza tekst do TextBox, jak pokazano na poniższym zrzucie ekranu przykładu:
Jeśli masz okno dialogowe lub formularz z możliwością edycji użytkownika i chcesz odroczyć aktualizacje źródłowe, dopóki użytkownik nie zakończy edycji pól i kliknie przycisk OK, możesz ustawić wartość UpdateSourceTrigger powiązań na Explicit, jak w poniższym przykładzie:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
Po ustawieniu wartości UpdateSourceTrigger na wartość Explicitwartość źródłowa zmienia się tylko wtedy, gdy aplikacja wywołuje metodę UpdateSource. W poniższym przykładzie pokazano, jak wywołać UpdateSource dla 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()
Notatka
Można użyć tej samej techniki dla właściwości innych kontrolek, ale należy pamiętać, że większość innych właściwości ma domyślną wartość UpdateSourceTriggerPropertyChanged. Aby uzyskać więcej informacji, zobacz stronę właściwości UpdateSourceTrigger.
Notatka
Właściwość UpdateSourceTrigger dotyczy aktualizacji źródłowych i dlatego ma zastosowanie tylko w przypadku powiązań TwoWay lub OneWayToSource. Aby powiązania TwoWay i OneWayToSource działały, obiekt źródłowy musi dostarczyć powiadomienia o zmianie właściwości. Aby uzyskać więcej informacji, zapoznaj się z przykładami cytowanymi w tym temacie. Ponadto można zapoznać się z Implementowanie powiadomienia o zmianie właściwości.
Zobacz też
.NET Desktop feedback