Postupy: Řízení, kdy text textového pole aktualizuje zdroj
Toto téma popisuje, jak pomocí vlastnosti UpdateSourceTrigger řídit časování aktualizací zdroje vazby. Toto téma používá jako příklad ovládací prvek TextBox.
Příklad
Vlastnost TextBox.Text má výchozí UpdateSourceTrigger hodnotu LostFocus. To znamená, že pokud má aplikace TextBox s vlastností TextBox.Text vázanou na data, text zadaný do TextBox neaktualizuje zdroj, dokud TextBox neztratí fokus (například když kliknete mimo TextBox).
Pokud chcete zdroj aktualizovat při psaní, nastavte UpdateSourceTrigger vazby na PropertyChanged. V následujícím příkladu zvýrazněné řádky kódu ukazují, že Text
vlastnosti TextBox i TextBlock jsou vázány na stejnou zdrojovou vlastnost. Vlastnost UpdateSourceTrigger vazby TextBox je nastavena na 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>
V důsledku toho TextBlock zobrazuje stejný text (protože se změní zdroj), jako když uživatel zadává text do TextBox, jak ukazuje následující snímek obrazovky z ukázky:
Pokud máte dialogové okno nebo formulář upravitelný uživatelem a chcete odložit aktualizace zdroje, dokud uživatel nedokončí úpravy polí a klikne na OK, můžete nastavit UpdateSourceTrigger hodnotu vazeb na Explicit, jak je znázorněno v následujícím příkladu:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
Když nastavíte hodnotu UpdateSourceTrigger na Explicit, zdrojová hodnota se změní pouze při volání UpdateSource metody aplikace. Následující příklad ukazuje, jak volat UpdateSource pro 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()
Poznámka
Stejnou techniku můžete použít pro vlastnosti jiných ovládacích prvků, ale mějte na paměti, že většina ostatních vlastností má výchozí UpdateSourceTrigger hodnotu PropertyChanged. Další informace naleznete na stránce vlastnosti UpdateSourceTrigger.
Poznámka
Vlastnost UpdateSourceTrigger se zabývá aktualizacemi zdroje, a proto je relevantní pouze pro TwoWay nebo OneWayToSource vazby. Aby fungovaly vazby TwoWay a OneWayToSource, musí zdrojový objekt poskytovat oznámení o změnách vlastností. Další informace najdete v ukázkách uvedených v tomto tématu. Kromě toho se můžete podívat na Implementovat oznámení o změně vlastnosti.
Viz také
.NET Desktop feedback