Bagikan melalui


Sintaks 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 menjelaskan traversal satu atau beberapa hubungan properti objek yang akhirnya diselesaikan 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, ini menyimpan info sebagai string, tetapi konsep traversal properti objek sangat mirip. Pengikatan data dan penargetan animasi masing-masing mengevaluasi jalur properti sedikit berbeda, jadi kami menjelaskan sintaks jalur properti secara terpisah untuk masing-masing jalur.

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 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.

Melintas grafik objek

Elemen sintaks yang menunjukkan traversal hubungan properti objek 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 langkah melalui beberapa hubungan properti objek. Lihatlah contoh berikut:

"{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" dicari 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 hanya diperiksa saat pengikatan diterapkan ke properti tertentu. Contoh ini akan gagal jika "Alamat" hanyalah nilai string yang tidak mengekspos bagian mana dari string yang merupakan alamat jalan. Biasanya, pengikatan menunjuk ke nilai properti berlapis tertentu dari objek bisnis yang memiliki struktur informasi yang diketahui dan disengaja.

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 "Teams" (daftar yang diurutkan), yang masing-masing memiliki kamus "Pemutar" di mana setiap pemain dikunci dengan nama belakang. Contoh jalur properti ke pemain tertentu di tim kedua adalah: "Teams[1]. Pemain[Smith]". (Anda menggunakan 1 untuk menunjukkan item kedua di "Teams" karena daftarnya diindeks nol.)

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

Properti terlampir

Jalur properti dapat mencakup referensi ke properti terlampir. Karena nama identifikasi properti terlampir sudah menyertakan titik, Anda harus mengapit nama properti terlampir dalam tanda kurung sehingga titik tidak diperlakukan sebagai langkah 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 terindeks, jika sumber data Anda memiliki properti seperti itu.

Men-debug jalur 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 waktu desain konvensional atau dukungan waktu kompilasi dalam alat pengembangan. Dalam banyak kasus, hasil run-time dari gagal menyelesaikan jalur properti adalah nilai kosong tanpa kesalahan, karena itu adalah perilaku fallback by-design resolusi pengikatan. Untungnya, Microsoft Visual Studio menyediakan mode output debug yang dapat mengisolasi bagian mana dari jalur properti yang menentukan sumber pengikatan yang gagal diatasi. Untuk informasi selengkapnya tentang menggunakan fitur alat pengembangan ini, lihat bagian "Penelusuran kesalahan" pengikatan Data secara mendalam.

Jalur properti untuk penargetan animasi

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

Untuk informasi selengkapnya tentang cara menentukan animasi di XAML, lihat Animasi papan cerita.

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 Persegi Panjang, dan Anda menerapkan Warna animasi ke properti Isian , jalur properti Anda bisa menjadi "Isi".

Penargetan properti tidak langsung

Anda dapat menganimasikan properti yang merupakan sub-properti dari 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 mengapit nama properti dalam tanda kurung, dan Anda menentukan properti dalam nama jenis. format propertyname . Misalnya, untuk menentukan bahwa Anda menginginkan nilai objek properti RenderTransform objek target, Anda menentukan "(UIElement.RenderTransform)" sebagai langkah pertama di jalur properti. Ini belum merupakan 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 Transformasi yang dapat dianimasikan dengan nilai Ganda : "(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 berhenti warna pertama dalam LinearGradientBrush yang diterapkan ke properti Latar Belakang kontrol, ini adalah jalur properti: "(Control.Background). (GradientBrush.GradientStops) [0]. (GradientStop.Color)". Perhatikan bagaimana pengindeks bukan langkah terakhir dalam jalur, dan bahwa langkah terakhir terutama harus mereferensikan properti GradientStop.Color item 0 dalam koleksi untuk menerapkan nilai animasi Warna ke dalamnya.

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 terlampir sudah menyertakan titik, Anda harus mengapit nama properti terlampir dalam tanda kurung sehingga titik tidak diperlakukan sebagai langkah properti objek. Misalnya, string untuk menentukan bahwa Anda ingin menganimasikan properti terlampir Grid.Row pada objek, gunakan jalur properti "(Grid.Row)".

Catatan Untuk contoh ini, nilai Grid.Row adalah jenis properti Int32 . sehingga Anda tidak dapat menganimasikannya dengan animasi Ganda . 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 properti penargetan animasi

  • Titik awal jalur properti yang diasumsikan adalah objek yang diidentifikasi oleh Storyboard.TargetName.
  • Semua objek dan properti yang dirujuk di sepanjang jalur properti harus publik.
  • Properti akhir (properti yang merupakan properti bernama terakhir di jalur) harus publik, baca-tulis, dan menjadi properti dependensi.
  • Properti akhir harus memiliki tipe 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 berikan ke konstruktor ini adalah string yang didefinisikan menggunakan sintaks jalur properti seperti yang kami jelaskan sebelumnya. Ini juga merupakan string yang sama dengan 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.