Bagikan melalui


Sintaksis jalur properti

Anda dapat menggunakan kelas PropertyPath dan sintaks string untuk membuat instans nilai PropertyPath baik di XAML atau dalam kode. Nilai PropertyPath digunakan oleh pengikatan data. Sintaks serupa digunakan untuk menargetkan animasi papan cerita. Untuk kedua skenario, jalur properti menggambarkan penelusuran satu atau beberapa hubungan properti objek yang akhirnya mengarah ke satu properti.

Anda dapat mengatur string jalur properti langsung ke atribut di XAML. Anda dapat menggunakan sintaks string yang sama untuk membuat PropertyPath yang mengatur Pengikatan dalam kode, atau untuk mengatur target animasi dalam kode menggunakan SetTargetProperty. Ada dua area fitur berbeda di Windows Runtime yang menggunakan jalur properti: pengikatan data, dan penargetan animasi. Penargetan animasi tidak membuat nilai sintaks jalur properti yang mendasari dalam implementasi Windows Runtime, melainkan menyimpan info tersebut sebagai string, tetapi konsep penjelajahan objek-properti sangat mirip. Pengikatan data dan animasi, yang menargetkannya masing-masing, mengevaluasi jalur properti sedikit berbeda, sehingga kami menjelaskan sintaks jalur properti secara terpisah untuk masing-masing.

Jalur properti untuk objek dalam pengikatan data

Di Windows Runtime, Anda dapat mengikat ke nilai target properti dependensi apa pun. Nilai properti sumber untuk pengikatan data tidak harus menjadi properti dependensi; ini bisa menjadi properti pada objek bisnis (misalnya kelas yang ditulis dalam bahasa Microsoft .NET atau C++). Atau, objek sumber untuk nilai pengikatan dapat menjadi objek dependensi yang sudah ada yang sudah ditentukan oleh aplikasi. Sumber dapat direferensikan baik dengan nama properti sederhana, atau dengan traversal hubungan properti objek dalam grafik objek objek bisnis.

Anda dapat mengikat ke nilai properti individual, atau Anda dapat mengikat ke sebuah properti target yang menyimpan daftar atau koleksi. Jika sumber Anda adalah koleksi, atau jika jalur menentukan properti koleksi, mesin pengikatan data cocok dengan item koleksi sumber dengan target pengikatan, menghasilkan perilaku seperti mengisi ListBox dengan daftar item dari kumpulan sumber data tanpa perlu mengantisipasi item tertentu dalam koleksi tersebut.

Menelusuri grafik objek

Elemen sintaksis yang menunjukkan traversal hubungan objek-properti dalam grafik objek adalah karakter titik (.). Setiap titik dalam string jalur properti menunjukkan pembagian antara objek (sisi kiri titik) dan properti objek tersebut (sisi kanan titik). String dievaluasi dari kiri ke kanan, yang memungkinkan melangkah melalui beberapa hubungan properti objek. Mari kita lihat contoh:

"{Binding Path=Customer.Address.StreetAddress1}"

Berikut adalah cara jalur ini dievaluasi:

  1. Objek konteks data (atau Sumber yang ditentukan oleh Pengikatan yang sama) dicari untuk properti bernama "Pelanggan".
  2. Objek yang merupakan nilai properti "Pelanggan" diperiksa untuk properti bernama "Alamat".
  3. Objek yang merupakan nilai properti "Alamat" dicari untuk properti bernama "StreetAddress1".

Pada setiap langkah ini, nilai diperlakukan sebagai objek. Jenis hasil diperiksa hanya ketika pengikatan diterapkan ke properti tertentu. Contoh ini akan gagal jika "Alamat" hanyalah nilai string yang tidak mengekspos bagian string mana yang merupakan alamat jalan. Biasanya, pengikatan menunjuk ke nilai properti berlapis tertentu dari objek bisnis yang memiliki struktur informasi yang diketahui dan direncanakan.

Aturan untuk properti dalam jalur properti pengikatan data

  • Semua properti yang dirujuk oleh jalur properti harus publik di objek bisnis sumber.
  • Properti akhir (properti yang merupakan properti bernama terakhir di jalur) harus publik dan harus dapat diubah - Anda tidak dapat mengikat nilai statis.
  • Properti akhir harus dibaca/ditulis jika jalur ini digunakan sebagai informasi Jalur untuk pengikatan dua arah.

Pengindeks

Jalur properti untuk pengikatan data dapat menyertakan referensi ke properti terindeks. Ini memungkinkan pengikatan ke daftar/vektor yang diurutkan, atau ke kamus/peta. Gunakan kurung siku karakter "[]" untuk menunjukkan properti terindeks. Isi tanda kurung ini dapat berupa bilangan bulat (untuk daftar yang diurutkan) atau string yang tidak dikutip (untuk kamus). Anda juga dapat mengikat kamus di mana kuncinya adalah bilangan bulat. Anda dapat menggunakan properti terindeks yang berbeda di jalur yang sama dengan titik yang memisahkan properti objek.

Misalnya, pertimbangkan objek bisnis di mana ada daftar "Tim" (daftar yang diurutkan), yang masing-masing memiliki kamus "Pemain" di mana setiap pemain dimasukkan berdasarkan nama belakang. Contoh jalur properti ke pemain tertentu di tim kedua adalah: "Teams[1].Players[Smith]". (Anda menggunakan angka 1 untuk menunjukkan item kedua di "Teams" karena daftar dimulai dari nol.)

Nota

Dukungan pengindeksan untuk sumber data C++ terbatas; lihat Pengikatan data secara mendalam.

Properti terlampir

Jalur properti dapat menyertakan referensi ke properti terlampir. Karena nama identifikasi properti lampiran sudah menyertakan titik, Anda harus mengapit nama properti lampiran dalam tanda kurung agar titik tersebut tidak diinterpretasikan sebagai langkah dalam hierarki properti-objek. Misalnya, string untuk menentukan bahwa Anda ingin menggunakan Canvas.ZIndex sebagai jalur pengikatan adalah "(Canvas.ZIndex)". Untuk informasi selengkapnya tentang properti terlampir lihat Gambaran umum properti terlampir.

Menggabungkan sintaks jalur properti

Anda dapat menggabungkan berbagai elemen sintaks jalur properti dalam satu string. Misalnya, Anda dapat menentukan jalur properti yang mereferensikan properti terlampir yang diindeks, jika sumber data Anda memiliki properti seperti itu.

Memecahkan masalah lintasan properti pengikatan

Karena jalur properti ditafsirkan oleh mesin pengikatan dan bergantung pada info yang mungkin hanya ada pada run-time, Anda harus sering men-debug jalur properti untuk pengikatan tanpa dapat mengandalkan dukungan waktu desain atau waktu kompilasi konvensional dalam alat pengembangan. Dalam banyak kasus, hasil waktu jalan dari kegagalan menyelesaikan jalur properti adalah nilai null tanpa kesalahan, karena itu adalah perilaku fallback yang dirancang dari resolusi pemautan. Untungnya, Microsoft Visual Studio menyediakan mode output debug yang dapat mengisolasi bagian mana dari jalur properti yang menentukan sumber pengikatan yang gagal diselesaikan. Untuk informasi selengkapnya tentang menggunakan fitur alat pengembangan ini, lihat bagian "Penelusuran Kesalahan" dari Pengikatan Data secara Mendalam.

Jalur properti untuk penargetan animasi

Animasi mengandalkan penargetan properti dependensi tempat nilai storyboard diterapkan saat animasi berjalan. Untuk mengidentifikasi objek tempat properti dianimasikan ada, animasi menargetkan elemen berdasarkan nama (atribut x:Name). Seringkali diperlukan untuk menentukan jalur properti yang dimulai dengan objek yang diidentifikasi sebagai Storyboard.TargetName, dan diakhir dengan nilai properti dependensi tertentu tempat animasi harus diterapkan. Jalur properti tersebut digunakan sebagai nilai untuk Storyboard.TargetProperty.

Untuk informasi lebih lanjut tentang cara menentukan animasi di XAML, lihat Storyboarded animations.

Penargetan sederhana

Jika Anda menganimasikan properti yang ada pada objek yang ditargetkan itu sendiri, dan jenis properti tersebut dapat memiliki animasi yang diterapkan langsung ke properti tersebut (bukan ke sub-properti dari nilai properti) maka Anda cukup memberi nama properti yang dianimasikan tanpa kualifikasi lebih lanjut. Misalnya, jika Anda menargetkan subkelas Bentuk seperti Segi Empat, dan Anda menerapkan Warna yang dianimasikan ke properti Isi, jalur properti Anda bisa menjadi "Isi".

Penargetan properti tidak langsung

Anda dapat menganimasikan properti yang merupakan sub-properti objek target. Dengan kata lain, jika ada properti objek target yang merupakan objek itu sendiri, dan objek tersebut memiliki properti, Anda harus menentukan jalur properti yang menjelaskan cara menelusuri hubungan properti objek tersebut. Setiap kali Anda menentukan objek tempat Anda ingin menganimasikan sub-properti, Anda menyertakan nama properti dalam tanda kurung, dan Anda menentukan properti dalam nama jenis. format nama properti . Misalnya, untuk menentukan bahwa Anda menginginkan nilai objek properti RenderTransform objek target, Anda menentukan "(UIElement.RenderTransform)" sebagai langkah pertama di jalur properti. Ini belum menjadi jalur lengkap, karena tidak ada animasi yang dapat diterapkan ke nilai Transformasi secara langsung. Jadi untuk contoh ini, Anda sekarang menyelesaikan jalur properti sehingga properti akhir adalah properti subkelas Transform yang dapat dianimasikan oleh nilai Double: "(UIElement.RenderTransform).(CompositeTransform.TranslateX)"

Menentukan anak tertentu dalam koleksi

Untuk menentukan item anak dalam properti koleksi, Anda bisa menggunakan pengindeks numerik. Gunakan kurung siku "[]" karakter di sekitar nilai indeks bilangan bulat. Anda hanya dapat mereferensikan daftar yang diurutkan, bukan kamus. Karena koleksi bukan nilai yang dapat dianimasikan, penggunaan pengindeks tidak pernah bisa menjadi properti akhir di jalur properti.

Misalnya, untuk menentukan bahwa Anda ingin menganimasikan warna stop pertama dalam LinearGradientBrush yang diterapkan ke properti Background kontrol, ini adalah jalur properti: "(Control.Background).(GradientBrush.GradientStops)[0].(GradientStop.Color)". Perhatikan bahwa pengindeks bukan langkah terakhir dalam jalur, dan langkah terakhir harus khususnya mereferensikan properti GradientStop.Color item 0 dalam koleksi untuk menerapkan nilai Warna yang dianimasikan ke properti tersebut.

Menganimasikan properti terlampir

Ini bukan skenario umum, tetapi dimungkinkan untuk menganimasikan properti terlampir, selama properti terlampir tersebut memiliki nilai properti yang cocok dengan jenis animasi. Karena nama identifikasi properti lampiran sudah menyertakan titik, Anda harus mengapit nama properti lampiran dalam tanda kurung agar titik tersebut tidak diinterpretasikan sebagai langkah dalam hierarki properti-objek. Misalnya, string untuk menentukan bahwa Anda ingin menganimasikan properti terlampir Grid.Row pada objek, gunakan jalur properti "(Grid.Row)".

Nota

Untuk contoh ini, nilai Grid.Row adalah jenis properti Int32 . sehingga Anda tidak dapat menganimasikannya dengan Double animation. Sebagai gantinya, Anda akan menentukan ObjectAnimationUsingKeyFrames yang memiliki komponen DiscreteObjectKeyFrame , di mana ObjectKeyFrame.Value diatur ke bilangan bulat seperti "0" atau "1".

Aturan untuk properti dalam jalur target properti animasi

  • Titik awal yang diasumsikan dari jalur properti adalah objek yang diidentifikasi oleh Storyboard.TargetName.
  • Semua objek dan properti yang dirujuk di sepanjang jalur properti harus bersifat publik.
  • Properti akhir (properti yang merupakan properti bernama terakhir di jalur) harus bersifat publik, bisa dibaca dan ditulis, dan merupakan properti ketergantungan.
  • Properti akhir harus memiliki jenis properti yang dapat dianimasikan oleh salah satu kelas luas jenis animasi (Animasi warna , Animasi ganda , Animasi titik , ObjectAnimationUsingKeyFrames).

Kelas PropertyPath

Kelas PropertyPath adalah jenis properti yang mendasari Binding.Path untuk skenario pengikatan.

Sebagian besar waktu, Anda dapat menerapkan PropertyPath di XAML tanpa menggunakan kode apa pun sama sekali. Tetapi dalam beberapa kasus Anda mungkin ingin menentukan objek PropertyPath menggunakan kode dan menetapkannya ke properti pada run-time.

PropertyPath memiliki konstruktor PropertyPath(String), dan tidak memiliki konstruktor default. String yang Anda teruskan ke konstruktor ini adalah string yang ditentukan menggunakan sintaks jalur properti seperti yang kami jelaskan sebelumnya. Ini juga merupakan string yang sama yang akan Anda gunakan untuk menetapkan Path sebagai atribut XAML. Satu-satunya API lain dari kelas PropertyPath adalah properti Jalur , yang bersifat baca-saja. Anda dapat menggunakan properti ini sebagai string konstruksi untuk instans PropertyPath lain.