Aracılığıyla paylaş


Nasıl Yapılır: TextBox Metninin Kaynağı Güncellediği Zamanı Kontrol Etme

Bu konuda, bağlama kaynak güncelleştirmelerinin UpdateSourceTrigger zamanlamasını denetlemek için özelliğinin nasıl kullanılacağı açıklanmaktadır. Konu, TextBox denetimini örnek olarak kullanır.

Örnek

özelliğinin TextBox.Text varsayılan UpdateSourceTrigger değeri vardır LostFocus. Bir uygulamada TextBox veriye bağlı bir TextBox.Text özelliği varsa, TextBox içine yazdığınız metin, TextBox odağını kaybedene kadar kaynağı güncelleştirmez (örneğin, TextBox dışına tıkladığınızda).

Yazarken kaynağın güncellenmesini istiyorsanız, bağlamanın değerini UpdateSourceTrigger olarak PropertyChanged ayarlayın. Aşağıdaki örnekte, vurgulanan kod satırları hem Text hem de TextBoxTextBlock özelliklerinin aynı kaynak özelliğe bağlı olduğunu gösteriyor. UpdateSourceTrigger bağlamanın TextBox özelliği PropertyChanged olarak ayarlanı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, aşağıdaki örnek ekran görüntüsünde gösterildiği gibi, kullanıcı TextBlock içine metin girdikçe, TextBox aynı metni gösterir (kaynak değişiklik gösterse de).

Basit veri bağlamayı gösteren ekran görüntüsü.

İ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 UpdateSourceTriggerdeğerini olarak ayarlayabilirsinizExplicit:

<TextBox Name="itemNameTextBox"
         Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />

Değeri UpdateSourceTrigger olarak Explicit ayarladığınızda, uygulama UpdateSource yöntemini çağırdığında kaynak değer yalnızca değişir. Aşağıdaki örnek, UpdateSource için itemNameTextBox'i nasıl çağrılacağını göstermektedir:

// 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()

Uyarı

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 .

Uyarı

UpdateSourceTrigger özelliği kaynak güncelleştirmeleri ile ilgilenir ve bu nedenle yalnızca TwoWay veya OneWayToSource bağlamaları için 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 Bildirimi'ni Uygulama bölümüne bakabilirsiniz.

Ayrıca bakınız