Bagikan melalui


Ringkasan Bab 16. Pengikatan data

Catatan

Buku ini diterbitkan pada musim semi 2016, dan belum diperbarui sejak saat itu. Ada banyak dalam buku yang tetap berharga, tetapi beberapa materi sudah kedaluarsa, dan beberapa topik tidak lagi sepenuhnya benar atau lengkap.

Programmer sering kali menemukan diri mereka menulis penanganan aktivitas yang mendeteksi kapan properti dari satu objek telah berubah, dan menggunakannya untuk mengubah nilai properti di objek lain. Proses ini dapat diotomatisasi dengan teknik pengikatan data. Pengikatan data biasanya didefinisikan dalam XAML dan menjadi bagian dari definisi antarmuka pengguna.

Sangat sering, pengikatan data ini menghubungkan objek antarmuka pengguna ke data yang mendasar. Ini adalah teknik yang lebih banyak dieksplorasi dalam Bab 18. MVVM. Namun, pengikatan data juga dapat menghubungkan dua atau beberapa elemen antarmuka pengguna. Sebagian besar contoh awal pengikatan data dalam bab ini menunjukkan teknik ini.

Dasar-dasar pengikatan

Beberapa properti, metode, dan kelas terlibat dalam pengikatan data:

Dua kelas berikut mendukung ekstensi markup XAML untuk pengikatan:

Dua antarmuka terlibat dalam pengikatan data:

  • INotifyPropertyChangedSystem.ComponentModel di namespace layanan adalah untuk menerapkan pemberitahuan saat properti berubah
  • IValueConverter digunakan untuk menentukan kelas kecil yang mengonversi nilai dari satu jenis ke jenis lainnya dalam pengikatan data

Pengikatan data menghubungkan dua properti dari objek yang sama, atau (lebih umum) dua objek yang berbeda. Kedua properti ini disebut sebagai sumber dan target. Umumnya, perubahan properti sumber menyebabkan perubahan terjadi di properti target, tetapi terkadang arahnya dibalik. Terlepas:

Kelas yang mengimplementasikan INotifyPropertyChanged peristiwa diaktifkan PropertyChanged saat properti berubah nilai. BindableObjectINotifyPropertyChanged menerapkan dan secara otomatis mengaktifkan PropertyChanged peristiwa ketika properti yang didukung oleh BindableProperty nilai perubahan, tetapi Anda dapat menulis kelas Anda sendiri yang menerapkan INotifyPropertyChanged tanpa berasal dari BindableObject.

Kode dan XAML

Sampel OpacityBindingCode menunjukkan cara mengatur pengikatan data dalam kode:

  • Sumber adalah Value properti dari Slider
  • Target adalah Opacity properti dari Label

Dua objek disambungkan dengan mengatur BindingContextLabel objek ke Slider objek. Dua properti terhubung dengan memanggil SetBinding metode ekstensi pada Label referensi OpacityProperty properti yang dapat diikat dan Value properti yang Slider dinyatakan sebagai string.

Memanipulasi Slider kemudian menyebabkan Label memudar masuk dan tidak terlihat.

OpacityBindingXaml adalah program yang sama dengan himpunan pengikatan data di XAML. dari diatur ke ekstensi markup yang x:Reference mereferensikan Slider, dan Opacity properti diatur Label ke Binding ekstensi markup dengan propertinya Path yang mereferensikan Value properti dari Slider.LabelBindingContext

Sumber dan BindingContext

Sampel BindingSourceCode menunjukkan pendekatan alternatif dalam kode. Objek Binding dibuat dengan mengatur Source properti ke Slider objek dan Path properti ke "Nilai". Metode SetBindingBindableObject kemudian dipanggil pada Label objek .

Binding Konstruktor juga dapat digunakan untuk menentukan Binding objek.

Sampel BindingSourceXaml menunjukkan teknik yang sebanding dalam XAML. Properti diatur ke ekstensi markup dengan Path diatur ke Value properti dan Source diatur ke ekstensi markup yang disematkanx:Reference.BindingLabelOpacity

Singkatnya, ada dua cara untuk mereferensikan objek sumber pengikatan:

  • BindingContext Melalui properti target
  • Source Melalui properti objek itu Binding sendiri

Jika keduanya ditentukan, yang kedua lebih diutamakan. Keuntungannya BindingContext adalah disebarluaskan melalui pohon visual. Ini sangat berguna jika beberapa properti target terikat ke objek sumber yang sama.

Program WebViewDemo menunjukkan teknik ini dengan WebView elemen . Dua Button elemen untuk menavigasi mundur dan maju mewarisi BindingContext dari induk mereka yang mereferensikan WebView. Properti IsEnabled dari dua tombol kemudian memiliki ekstensi markup sederhana Binding yang menargetkan properti tombol IsEnabled berdasarkan pengaturan CanGoBack properti baca-saja dan CanGoForward dari WebView.

Mode pengikatan

Atur Mode properti Binding ke anggota BindingMode enumerasi:

  • OneWay sehingga perubahan dalam properti sumber memengaruhi target
  • OneWayToSource sehingga perubahan dalam properti target memengaruhi sumber
  • TwoWay sehingga perubahan sumber dan target saling memengaruhi
  • Default untuk menggunakan DefaultBindingMode yang ditentukan ketika target BindableProperty dibuat. Jika tidak ada yang ditentukan, defaultnya adalah OneWay untuk properti normal yang dapat diikat, dan OneWayToSource untuk properti yang dapat diikat baca-saja.

Catatan

Enumerasi BindingMode sekarang juga termasuk OnTime untuk menerapkan pengikatan hanya ketika konteks pengikatan berubah dan bukan ketika properti sumber berubah.

Properti yang kemungkinan menjadi target pengikatan data dalam skenario MVVM umumnya memiliki DefaultBindingMode .TwoWay Ini adalah:

  • Value properti dari Slider dan Stepper
  • IsToggled properti dari Switch
  • Text properti dari Entry, Editor, dan SearchBar
  • Date properti dari DatePicker
  • Time properti dari TimePicker

Sampel BindingModes menunjukkan empat mode pengikatan dengan pengikatan data di mana target adalah FontSize properti dan Label sumbernya adalah Value properti dari Slider. Ini memungkinkan masing-masing Slider untuk mengontrol ukuran font dari yang sesuai Label. Slider Tetapi elemen tidak diinisialisasi karena DefaultBindingModeFontSize propertinya adalah OneWay.

Sampel ReverseBinding mengatur pengikatan pada Value properti SliderFontSize referensi properti masing-masing Label. Ini tampaknya mundur, tetapi bekerja lebih baik dalam menginisialisasi Slider elemen karena Value properti dari Slider memiliki DefaultBindingMode .TwoWay

Cuplikan layar tiga kali pengikatan terbalik

Ini dianalogikan dengan bagaimana pengikatan didefinisikan dalam MVVM, dan Anda akan sering menggunakan jenis pengikatan ini.

Pemformatan string

Ketika properti target berjenis string, Anda dapat menggunakan properti yang StringFormat ditentukan oleh BindingBase untuk mengonversi sumber menjadi string. Atur StringFormat properti ke string pemformatan .NET yang akan Anda gunakan dengan format statis String.Format untuk menampilkan objek. Saat menggunakan string pemformatan ini dalam ekstensi markup, kelilingi dengan tanda kutip tunggal sehingga kurung kurawal tidak akan keliru untuk ekstensi markup yang disematkan.

Sampel ShowViewValues menunjukkan cara menggunakan StringFormat di XAML.

Sampel WhatSizeBindings menunjukkan menampilkan ukuran halaman dengan pengikatan ke Width properti dan Height dari ContentPage.

Mengapa disebut "Jalur"?

Properti PathBinding dipanggil karena dapat berupa serangkaian properti dan pengindeks yang dipisahkan oleh titik. Sampel BindingPathDemos menunjukkan beberapa contoh.

Pengikatan pengonversi nilai

Saat properti sumber dan target pengikatan memiliki jenis yang berbeda, Anda dapat mengonversi antara jenis menggunakan pengikatan pengonversi. Ini adalah kelas yang mengimplementasikan IValueConverter antarmuka dan berisi dua metode: Convert untuk mengonversi sumber ke target, dan ConvertBack untuk mengonversi target ke sumber.

Kelas IntToBoolConverter di Xamarin.Formspustaka Book.Toolkit adalah contoh untuk mengonversi int ke .bool Ini ditunjukkan oleh sampel ButtonEnabler , yang hanya memungkinkan Button jika setidaknya satu karakter telah diketik ke dalam Entry.

Kelas BoolToStringConverter mengonversi menjadi stringbool dan menentukan dua properti untuk menentukan teks apa yang harus dikembalikan dan falsetrue nilainya. Mirip BoolToColorConverter . Sampel SwitchText menunjukkan penggunaan kedua pengonversi ini untuk menampilkan teks yang berbeda dalam warna yang berbeda berdasarkan Switch pengaturan.

Generik BoolToObjectConverter dapat menggantikan BoolToStringConverter dan BoolToColorConverter berfungsi sebagai pengonversi -ke-objek umum booldari jenis apa pun.

Pengikatan dan tampilan kustom

Anda dapat menyederhanakan kontrol kustom menggunakan pengikatan data. File NewCheckBox.cs kode mendefinisikan Textproperti , TextColor, FontSize, FontAttributes, dan IsChecked , tetapi tidak memiliki logika sama sekali untuk visual kontrol. NewCheckBox.cs.xaml Sebaliknya, file berisi semua markup untuk visual kontrol melalui pengikatan data pada Label elemen berdasarkan properti yang ditentukan dalam file code-behind.

Sampel NewCheckBoxDemo menunjukkan NewCheckBox kontrol kustom.