Nasıl yapılır: TextBox Metni Kaynağı Güncelleştirdiğinde Denetleme
Bu konuda, bağlama kaynak güncelleştirmelerinin UpdateSourceTrigger zamanlamasını denetlemek için özelliğinin nasıl kullanılacağı açıklanmaktadır. Konu, denetimi örnek olarak kullanır TextBox .
Örnek
özelliğinin TextBox.Text varsayılan UpdateSourceTrigger değeri vardır LostFocus. Başka bir deyişle, bir uygulamanın TextBox veriye bağlı TextBox.Text özelliği varsa, içine yazdığınız metin odağı kaybedene TextBox kadar TextBox kaynağı güncelleştirmez (örneğin, öğesinin dışında TextBoxbir yere tıkladığınızda).
Siz yazarken kaynağın güncelleştirilmesini istiyorsanız, bağlamanın değerini olarak PropertyChangedayarlayınUpdateSourceTrigger. Aşağıdaki örnekte, vurgulanan kod satırları hem hem de TextBoxTextBlock özelliklerinin aynı kaynak özelliğe bağlı olduğunu Text
gösterir. UpdateSourceTrigger Bağlamanın TextBox özelliği olarak PropertyChangedayarlanır.
<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>
Sonuç olarak, örneğin aşağıdaki ekran görüntüsünde gösterildiği gibi, TextBlock kullanıcı içine TextBoxmetin girdiği metni gösterir (kaynak değiştiğinden):
İletişim kutunuz veya kullanıcı tarafından düzenlenebilir bir formunuz varsa ve kullanıcı alanları düzenlemeyi bitirip "Tamam" seçeneğine tıklayana kadar kaynak güncelleştirmelerini ertelemek istiyorsanız, aşağıdaki örnekte olduğu gibi bağlamalarınızın Explicitdeğerini olarak ayarlayabilirsinizUpdateSourceTrigger:
<TextBox Name="itemNameTextBox"
Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />
değerini Explicitolarak ayarladığınızdaUpdateSourceTrigger, kaynak değer yalnızca uygulama yöntemini çağırdığında UpdateSource değişir. Aşağıdaki örnekte için itemNameTextBox
nasıl çağrılacakları UpdateSource gösterilmektedir:
// 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()
Dekont
Diğer denetimlerin özellikleri için aynı tekniği kullanabilirsiniz, ancak diğer özelliklerin çoğunun varsayılan UpdateSourceTrigger değeri PropertyChangedolduğunu unutmayın. Daha fazla bilgi için özellik sayfasına bakın UpdateSourceTrigger .
Dekont
Özelliği UpdateSourceTrigger kaynak güncelleştirmeleri ile ilgilenir ve bu nedenle yalnızca veya OneWayToSource bağlamaları için TwoWay geçerlidir. ve TwoWayOneWayToSource bağlamalarının çalışması için kaynak nesnenin özellik değişikliği bildirimleri sağlaması gerekir. Daha fazla bilgi için bu konuda belirtilen örneklere başvurabilirsiniz. Buna ek olarak, Özellik Değişikliği BildirimiNi Uygulama bölümüne bakabilirsiniz.
Ayrıca bkz.
.NET Desktop feedback