Aracılığıyla paylaş


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):

Screenshot that shows simple data binding.

İ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 itemNameTextBoxnası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.