Bagikan melalui


Cara: Mengontrol Saat Teks Kotak Teks Memperbarui Sumber

Topik ini menjelaskan cara menggunakan UpdateSourceTrigger properti untuk mengontrol waktu pembaruan sumber pengikatan. Topik ini menggunakan TextBox kontrol sebagai contoh.

Contoh

Properti TextBox.Text memiliki nilai default UpdateSourceTrigger .LostFocus Ini berarti jika aplikasi memiliki TextBox properti dengan terikat TextBox.Text data, teks yang Anda ketikkan TextBox tidak memperbarui sumber sampai TextBox kehilangan fokus (misalnya, ketika Anda mengklik menjauhi TextBox).

Jika Anda ingin sumber diperbarui saat Anda mengetik, atur UpdateSourceTrigger pengikatan ke PropertyChanged. Dalam contoh berikut, baris kode yang disorot menunjukkan bahwa Text properti dan TextBoxTextBlock terikat ke properti sumber yang sama. Properti UpdateSourceTrigger pengikatan TextBox diatur ke 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>

Akibatnya, TextBlock menunjukkan teks yang sama (karena sumber berubah) saat pengguna memasukkan teks ke dalam TextBox, seperti yang diilustrasikan oleh cuplikan layar sampel berikut:

Screenshot that shows simple data binding.

Jika Anda memiliki dialog atau formulir yang dapat diedit pengguna dan Anda ingin menugaskan pembaruan sumber hingga pengguna selesai mengedit bidang dan mengklik "OK", Anda dapat mengatur UpdateSourceTrigger nilai pengikatan Anda ke Explicit, seperti dalam contoh berikut:

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

Saat Anda mengatur UpdateSourceTrigger nilai ke Explicit, nilai sumber hanya berubah saat aplikasi memanggil UpdateSource metode . Contoh berikut menunjukkan cara memanggil UpdateSource untuk 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()

Catatan

Anda dapat menggunakan teknik yang sama untuk properti kontrol lain, tetapi perlu diingat bahwa sebagian besar properti lain memiliki nilai PropertyChangeddefault UpdateSourceTrigger . Untuk informasi selengkapnya, lihat UpdateSourceTrigger halaman properti.

Catatan

UpdateSourceTrigger Properti ini berkaitan dengan pembaruan sumber dan oleh karena itu hanya relevan untuk TwoWay atau OneWayToSource pengikatan. Agar TwoWay dan OneWayToSource pengikatan berfungsi, objek sumber perlu memberikan pemberitahuan perubahan properti. Anda dapat merujuk ke sampel yang dikutip dalam topik ini untuk informasi selengkapnya. Selain itu, Anda dapat melihat Implement Property Change Notification.

Baca juga