Практическое руководство: Управление тем, когда текст текстового поля обновляет источник.
В этом разделе описывается, как использовать свойство UpdateSourceTrigger для управления временем обновления источника привязки. В этом разделе в качестве примера используется элемент управления TextBox.
Пример
Свойство TextBox.Text имеет значение UpdateSourceTrigger по умолчанию LostFocus. Это означает, что если у приложения есть TextBox с свойством, привязанным к данным TextBox.Text, текст, введенный в TextBox, не обновляет источник, пока TextBox не потеряет фокус (например, при щелчке от TextBox).
Если вы хотите, чтобы источник обновлялся по мере ввода, задайте для UpdateSourceTrigger привязки значение PropertyChanged. В следующем примере выделенные строки кода показывают, что свойства Text
обоих TextBox и TextBlock привязаны к одному и тому же исходному свойству. Для свойства UpdateSourceTrigger привязки TextBox задано значение 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>
В результате в TextBlock отображается тот же текст, что и при вводе пользователем текста в TextBox, как показано на следующем примере экрана.
Если у вас есть диалоговое окно или редактируемая пользователем форма, и вы хотите отложить исходные обновления до тех пор, пока пользователь не завершит редактирование полей и нажмите кнопку "ОК", можно задать значение UpdateSourceTrigger ваших привязок для Explicit, как показано в следующем примере:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
При установке значения UpdateSourceTrigger в Explicit, исходное значение изменяется только при вызове метода UpdateSource приложением. В следующем примере показано, как вызывать 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()
Заметка
Вы можете использовать тот же метод для свойств других элементов управления, но помните, что большинство других свойств имеют значение по умолчанию UpdateSourceTrigger, которое идет перед значением PropertyChanged. Дополнительные сведения см. на странице свойств UpdateSourceTrigger.
Заметка
Свойство UpdateSourceTrigger относится к обновлениям источника и поэтому относится только к привязкам TwoWay или OneWayToSource. Для работы TwoWay и OneWayToSource привязок исходный объект должен предоставлять уведомления об изменении свойств. Дополнительные сведения см. в примерах, приведенных в этом разделе. Кроме того, можно просмотреть реализации уведомления об изменении свойств.
См. также
.NET Desktop feedback