Bagikan melalui


Properti Dependensi Baca-Saja

Topik ini menjelaskan properti dependensi baca-saja, termasuk properti dependensi baca-saja yang ada dan skenario dan teknik untuk membuat properti dependensi baca-saja kustom.

Prasyarat

Topik ini mengasumsikan bahwa Anda memahami skenario dasar penerapan properti dependensi, dan bagaimana metadata diterapkan ke properti dependensi kustom. Lihat Properti Dependensi Kustom dan Metadata Properti Dependensi untuk konteksnya.

Properti Dependensi Baca-Saja yang Ada

Beberapa properti dependensi yang ditentukan dalam kerangka kerja Windows Presentation Foundation (WPF) bersifat baca-saja. Alasan umum untuk menentukan properti dependensi baca-saja adalah bahwa ini adalah properti yang harus digunakan untuk penentuan status, tetapi di mana status tersebut dipengaruhi oleh banyak faktor, tetapi hanya mengatur properti ke status tersebut tidak diinginkan dari perspektif desain antarmuka pengguna. Misalnya, properti IsMouseOver ini benar-benar hanya memunculkan status seperti yang ditentukan dari input mouse. Setiap upaya untuk mengatur nilai ini secara terprogram dengan menghindari input mouse yang benar tidak akan dapat diprediksi dan akan menyebabkan inkonsistensi.

Dengan tidak diatur, properti dependensi baca-saja tidak sesuai untuk banyak skenario di mana properti dependensi biasanya menawarkan solusi (yaitu: pengikatan data, dapat langsung bergaya ke nilai, validasi, animasi, warisan). Meskipun tidak dapat diatur, properti dependensi baca-saja masih memiliki beberapa kemampuan tambahan yang didukung oleh properti dependensi dalam sistem properti. Kemampuan yang tersisa yang paling penting adalah bahwa properti dependensi baca-saja masih dapat digunakan sebagai pemicu properti dalam gaya. Anda tidak dapat mengaktifkan pemicu dengan properti runtime bahasa umum (CLR) normal; itu harus menjadi properti dependensi. IsMouseOver Properti tersebut adalah contoh sempurna dari skenario di mana mungkin cukup berguna untuk menentukan gaya untuk kontrol, di mana beberapa properti yang terlihat seperti latar belakang, latar depan, atau properti serupa dari elemen yang disusun dalam kontrol akan berubah ketika pengguna menempatkan mouse di beberapa wilayah kontrol Anda yang ditentukan. Perubahan properti dependensi baca-saja juga dapat dideteksi dan dilaporkan oleh proses invalidasi sistem properti yang melekat, dan ini sebenarnya mendukung fungsionalitas pemicu properti secara internal.

Membuat properti dependensi baca-saja kustom

Pastikan untuk membaca bagian di atas mengenai mengapa properti dependensi baca-saja tidak akan berfungsi untuk banyak skenario properti dependensi umum. Tetapi jika Anda memiliki skenario yang sesuai, Anda mungkin ingin membuat properti dependensi baca-saja Anda sendiri.

Sebagian besar proses pembuatan properti dependensi baca-saja sama seperti yang dijelaskan dalam Properti Dependensi Kustom dan Menerapkan topik Properti Dependensi. Ada tiga perbedaan penting:

  • Saat mendaftarkan properti Anda, panggil RegisterReadOnly metode alih-alih metode normal Register untuk pendaftaran properti.

  • Saat mengimplementasikan properti "wrapper" CLR, pastikan bahwa pembungkus juga tidak memiliki implementasi yang ditetapkan, sehingga tidak ada inkonsistensi dalam status baca-saja untuk pembungkus publik yang Anda ekspos.

  • Objek yang dikembalikan oleh pendaftaran baca-saja bukan DependencyPropertyKeyDependencyProperty. Anda masih harus menyimpan bidang ini sebagai anggota tetapi biasanya Anda tidak akan menjadikannya anggota publik jenis tersebut.

Bidang atau nilai privat apa pun yang Anda miliki yang mendukung properti dependensi baca-saja tentu saja dapat sepenuhnya dapat ditulis menggunakan logika apa pun yang Anda putuskan. Namun, cara paling mudah untuk mengatur properti baik awalnya atau sebagai bagian dari logika runtime adalah dengan menggunakan API sistem properti, daripada menghindari sistem properti dan mengatur bidang pencadangan privat secara langsung. Secara khusus, ada tanda tangan SetValue yang menerima parameter jenis DependencyPropertyKey. Bagaimana dan di mana Anda menetapkan nilai ini secara terprogram dalam logika aplikasi Anda akan memengaruhi bagaimana Anda mungkin ingin mengatur akses pada DependencyPropertyKey yang dibuat ketika Anda pertama kali mendaftarkan properti dependensi. Jika Anda menangani logika ini semua dalam kelas, Anda dapat membuatnya privat, atau jika Anda mengharuskannya diatur dari bagian lain dari rakitan, Anda mungkin mengaturnya secara internal. Salah satu pendekatannya adalah memanggil SetValue dalam penanganan aktivitas kelas dari peristiwa yang relevan yang menginformasikan instans kelas bahwa nilai properti tersimpan perlu diubah. Pendekatan lain adalah mengikat properti dependensi bersama-sama dengan menggunakan pasangan PropertyChangedCallback dan CoerceValueCallback panggilan balik sebagai bagian dari metadata properti tersebut selama pendaftaran.

DependencyPropertyKey Karena bersifat privat, dan tidak disebarluaskan oleh sistem properti di luar kode Anda, properti dependensi baca-saja memang memiliki keamanan pengaturan yang lebih baik daripada properti dependensi baca-tulis. Untuk properti dependensi baca-tulis, bidang identifikasi secara eksplisit atau implisit publik dan dengan demikian properti dapat diatur secara luas. Untuk detail selengkapnya, lihat Keamanan Properti Dependensi.

Baca juga