Jak kontrolować kiedy tekst TextBox aktualizuje źródło
W tym temacie opisano sposób używania UpdateSourceTrigger właściwości do kontrolowania chronometrażu aktualizacji źródła powiązania. W tym temacie użyto kontrolki TextBox jako przykładu.
Przykład
Właściwość TextBox.Text ma wartość LostFocusdomyślną UpdateSourceTrigger . Oznacza to, że jeśli aplikacja ma TextBox właściwość powiązana TextBox.Text z danymi, tekst wpisany w TextBox obiekcie nie aktualizuje źródła do momentu TextBox utraty fokusu (na przykład po kliknięciu TextBoxz dala od obiektu ).
Jeśli chcesz zaktualizować źródło podczas wpisywania, ustaw UpdateSourceTrigger powiązanie na PropertyChangedwartość . W poniższym przykładzie wyróżnione wiersze kodu pokazują, że Text
właściwości i TextBoxTextBlock są powiązane z tą samą właściwością źródłową. Właściwość UpdateSourceTriggerTextBox powiązania jest ustawiona na PropertyChangedwartość .
<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 rezultacie wyświetlany TextBlock jest ten sam tekst (ponieważ źródło zmienia się), ponieważ użytkownik wprowadza tekst do TextBoxelementu , jak pokazano na poniższym zrzucie ekranu przykładu:
Jeśli masz okno dialogowe lub formularz edytowalny dla 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ć UpdateSourceTrigger wartość powiązań na Explicit, jak w poniższym przykładzie:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
Po ustawieniu UpdateSourceTrigger wartości na Explicitwartość , wartość źródłowa zmienia się tylko wtedy, gdy aplikacja wywołuje metodę UpdateSource . W poniższym przykładzie pokazano, jak wywołać metodę UpdateSource :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()
Uwaga
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 wartość PropertyChangeddomyślną UpdateSourceTrigger . Aby uzyskać więcej informacji, zobacz UpdateSourceTrigger stronę właściwości.
Uwaga
Właściwość UpdateSourceTrigger zajmuje się aktualizacjami źródłowymi i dlatego ma zastosowanie tylko w przypadku TwoWay powiązań lub OneWayToSource . Aby TwoWay powiązania 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żesz zapoznać się z komunikatem Implementowanie powiadomienia o zmianie właściwości.
Zobacz też
.NET Desktop feedback