Bagikan melalui


Gambaran Umum Deklarasi Pengikatan

Topik ini membahas berbagai cara Anda dapat mendeklarasikan pengikatan.

Prasyarat

Sebelum membaca topik ini, penting bahwa Anda terbiasa dengan konsep dan penggunaan ekstensi markup. Untuk informasi selengkapnya tentang ekstensi markup, lihat Ekstensi Markup dan WPF XAML.

Topik ini tidak mencakup konsep pengikatan data. Untuk diskusi konsep pengikatan data, lihat Gambaran Umum Pengikatan Data.

Mendeklarasikan Pengikatan di XAML

Bagian ini membahas cara mendeklarasikan pengikatan di XAML.

Penggunaan Ekstensi Markup

Binding adalah ekstensi markup. Saat Anda menggunakan ekstensi pengikatan untuk mendeklarasikan pengikatan, deklarasi terdiri dari serangkaian klausul mengikuti Binding kata kunci dan dipisahkan oleh koma (,). Klausa dalam deklarasi pengikatan dapat dalam urutan apa pun dan ada banyak kemungkinan kombinasi. Klausa adalah pasangan Nilai Nama=di mana Nama adalah nama Binding properti dan Nilai adalah nilai yang Anda tetapkan untuk properti .

Saat membuat string deklarasi pengikatan dalam markup, string tersebut harus dilampirkan ke properti dependensi tertentu dari objek target. Contoh berikut menunjukkan cara mengikat TextBox.Text properti menggunakan ekstensi pengikatan, menentukan Source properti dan Path .

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

Anda dapat menentukan sebagian besar properti kelas dengan Binding cara ini. Untuk informasi selengkapnya tentang ekstensi pengikatan serta untuk daftar Binding properti yang tidak dapat diatur menggunakan ekstensi pengikatan, lihat Ringkasan Ekstensi Markup Pengikatan.

Sintaks Elemen Objek

Sintaks elemen objek adalah alternatif untuk membuat deklarasi pengikatan. Dalam kebanyakan kasus, tidak ada keuntungan khusus untuk menggunakan ekstensi markup atau sintaks elemen objek. Namun, dalam kasus ekstensi markup tidak mendukung skenario Anda, seperti ketika nilai properti Anda adalah jenis non-string yang tidak ada konversi jenisnya, Anda perlu menggunakan sintaks elemen objek.

Berikut ini adalah contoh sintaks elemen objek dan penggunaan ekstensi markup:

<TextBlock Name="myconvertedtext"
  Foreground="{Binding Path=TheDate,
                       Converter={StaticResource MyConverterReference}}">
  <TextBlock.Text>
    <Binding Path="TheDate"
             Converter="{StaticResource MyConverterReference}"/>
  </TextBlock.Text>
</TextBlock>

Contoh mengikat properti dengan mendeklarasikan Foreground pengikatan menggunakan sintaks ekstensi. Deklarasi pengikatan untuk Text properti menggunakan sintaks elemen objek.

Untuk informasi selengkapnya tentang berbagai istilah, lihat Sintaks XAML Secara Rinci.

MultiBinding dan PriorityBinding

MultiBinding dan PriorityBinding tidak mendukung sintaks ekstensi XAML. Oleh karena itu, Anda harus menggunakan sintaks elemen objek jika Anda mendeklarasikan MultiBinding atau PriorityBinding di XAML.

Membuat Pengikatan dalam Kode

Cara lain untuk menentukan pengikatan adalah dengan mengatur properti langsung pada Binding objek dalam kode. Contoh berikut menunjukkan cara membuat Binding objek dan menentukan properti dalam kode. Dalam contoh ini, TheConverter adalah objek yang mengimplementasikan IValueConverter antarmuka.

private void OnPageLoaded(object sender, EventArgs e)
{
    // Make a new source, to grab a new timestamp
    MyData myChangedData = new MyData();

    // Create a new binding
    // TheDate is a property of type DateTime on MyData class
    Binding myNewBindDef = new Binding("TheDate");

    myNewBindDef.Mode = BindingMode.OneWay;
    myNewBindDef.Source = myChangedData;
    myNewBindDef.Converter = TheConverter;
    myNewBindDef.ConverterCulture = new CultureInfo("en-US");

      // myDatetext is a TextBlock object that is the binding target object
    BindingOperations.SetBinding(myDateText, TextBlock.TextProperty, myNewBindDef);
    BindingOperations.SetBinding(myDateText, TextBlock.ForegroundProperty, myNewBindDef);

    lbChooseCulture.SelectedIndex = 0;
}
 Private Sub OnPageLoaded(ByVal sender As Object, ByVal e As EventArgs)
     ' Make a new source, to grab a new timestamp
     Dim myChangedData As New MyData()

     ' Create a new binding
 ' TheDate is a property of type DateTime on MyData class
     Dim myNewBindDef As New Binding("TheDate")

     myNewBindDef.Mode = BindingMode.OneWay
     myNewBindDef.Source = myChangedData
     myNewBindDef.Converter = TheConverter
     myNewBindDef.ConverterCulture = New CultureInfo("en-US")

' myDatetext is a TextBlock object that is the binding target object
     BindingOperations.SetBinding(myDateText, TextBlock.TextProperty, myNewBindDef)
     BindingOperations.SetBinding(myDateText, TextBlock.ForegroundProperty, myNewBindDef)

     lbChooseCulture.SelectedIndex = 0
 End Sub

Jika objek yang Anda ikat adalah FrameworkElement atau FrameworkContentElement Anda dapat memanggil SetBinding metode pada objek Anda secara langsung alih-alih menggunakan BindingOperations.SetBinding. Misalnya, lihat Membuat Pengikatan dalam Kode.

Sintaks Jalur Pengikatan

Path Gunakan properti untuk menentukan nilai sumber yang ingin Anda ikat:

  • Dalam kasus paling sederhana, Path nilai properti adalah nama properti objek sumber yang akan digunakan untuk pengikatan, seperti Path=PropertyName.

  • Subproperti properti dapat ditentukan oleh sintaks yang sama seperti dalam C#. Misalnya, klausa Path=ShoppingCart.Order mengatur pengikatan ke subproperti Order objek atau properti ShoppingCart.

  • Untuk mengikat properti terlampir, tempatkan tanda kurung di sekitar properti terlampir. Misalnya, untuk mengikat ke properti DockPanel.Dockterlampir , sintaksnya adalah Path=(DockPanel.Dock).

  • Pengindeks properti dapat ditentukan dalam tanda kurung siku mengikuti nama properti tempat pengindeks diterapkan. Misalnya, klausa Path=ShoppingCart[0] mengatur pengikatan ke indeks yang sesuai dengan bagaimana pengindeksan internal properti Anda menangani string harfiah "0". Pengindeks berlapis juga didukung.

  • Pengindeks dan subproperti dapat dicampur dalam Path klausul; misalnya, Path=ShoppingCart.ShippingInfo[MailingAddress,Street].

  • Di dalam pengindeks, Anda dapat memiliki beberapa parameter pengindeks yang dipisahkan oleh koma (,). Jenis setiap parameter dapat ditentukan dengan tanda kurung. Misalnya, Anda dapat memiliki Path="[(sys:Int32)42,(sys:Int32)24]", di mana sys dipetakan ke System namespace layanan.

  • Ketika sumber adalah tampilan koleksi, item saat ini dapat ditentukan dengan garis miring (/). Misalnya, klausa Path=/ mengatur pengikatan ke item saat ini dalam tampilan. Ketika sumber adalah koleksi, sintaks ini menentukan item saat ini dari tampilan koleksi default.

  • Nama properti dan garis miring dapat dikombinasikan untuk melintasi properti yang merupakan koleksi. Misalnya, Path=/Offices/ManagerName menentukan item koleksi sumber saat ini, yang berisi Offices properti yang juga merupakan koleksi. Item saat ini adalah objek yang berisi ManagerName properti.

  • Secara opsional, jalur titik (.) dapat digunakan untuk mengikat ke sumber saat ini. Misalnya, Text="{Binding}" sama dengan Text="{Binding Path=.}".

Mekanisme Pelepasan

  • Di dalam pengindeks ([ ]), karakter tanda sisipan (^) lolos dari karakter berikutnya.

  • Jika Anda mengatur Path di XAML, Anda juga perlu melarikan diri (menggunakan entitas XML) karakter tertentu yang khusus untuk definisi bahasa XML:

    • Gunakan &amp; untuk menghindari karakter "&".

    • Gunakan &gt; untuk menghindari tag akhir ">".

  • Selain itu, jika Anda menjelaskan seluruh pengikatan dalam atribut menggunakan sintaks ekstensi markup, Anda perlu meloloskan (menggunakan karakter garis miring terbalik \) yang khusus untuk pengurai ekstensi markup WPF:

    • Garis miring terbelakang (\) adalah karakter escape itu sendiri.

    • Tanda sama dengan (=) memisahkan nama properti dari nilai properti.

    • Koma (,) memisahkan properti.

    • Kurung kurawal kanan (}) adalah akhir dari ekstensi markup.

Perilaku Default

Perilaku default adalah sebagai berikut jika tidak ditentukan dalam deklarasi.

  • Pengonversi default dibuat yang mencoba melakukan konversi jenis antara nilai sumber pengikatan dan nilai target pengikatan. Jika konversi tidak dapat dilakukan, pengonversi default mengembalikan null.

  • Jika Anda tidak mengatur ConverterCulture, mesin pengikatan menggunakan Language properti objek target pengikatan. Di XAML, ini default ke "en-US" atau mewarisi nilai dari elemen akar (atau elemen apa pun) halaman, jika telah ditetapkan secara eksplisit.

  • Selama pengikatan sudah memiliki konteks data (misalnya, konteks data yang diwariskan yang berasal dari elemen induk), dan item atau koleksi apa pun yang dikembalikan oleh konteks tersebut sesuai untuk pengikatan tanpa memerlukan modifikasi jalur lebih lanjut, deklarasi pengikatan tidak dapat memiliki klausul sama sekali: {Binding} Ini sering kali cara pengikatan ditentukan untuk gaya data, di mana pengikatan bertindak atas koleksi. Untuk informasi selengkapnya, lihat bagian "Seluruh Objek yang Digunakan sebagai Sumber Pengikatan" di Gambaran Umum Sumber Pengikatan.

  • Default Mode bervariasi antara satu arah dan dua arah tergantung pada properti dependensi yang terikat. Anda selalu dapat mendeklarasikan mode pengikatan secara eksplisit untuk memastikan bahwa pengikatan Anda memiliki perilaku yang diinginkan. Secara umum, properti kontrol yang dapat diedit pengguna, seperti TextBox.Text dan RangeBase.Value, default ke pengikatan dua arah, sedangkan sebagian besar properti lain default ke pengikatan satu arah.

  • Nilai default UpdateSourceTrigger bervariasi antara PropertyChanged dan LostFocus tergantung pada properti dependensi terikat juga. Nilai default untuk sebagian besar properti dependensi adalah PropertyChanged, sementara TextBox.Text properti memiliki nilai LostFocusdefault .

Baca juga