Apa itu properti ketergantungan?

Jawaban:

93

Properti dependensi adalah properti kelas yang diturunkan dari DependencyObject, dan properti itu spesial daripada hanya menggunakan bidang dukungan untuk menyimpan nilainya, mereka menggunakan beberapa metode pembantu pada DependencyObject.

Hal terbaik tentang mereka adalah bahwa mereka memiliki semua pipa untuk mengikat data di dalamnya. Jika Anda mengikat sesuatu kepada mereka, mereka akan memberi tahu ketika mereka berubah.

Matt Hamilton
sumber
38
Itu masih memberi tahu saya sedikit tentang apa yang dapat dilakukan properti dependensi, atau mengapa properti itu ada. Anda tidak menyebutkan properti mereka yang paling berharga, resolusi nilai hingga pohon elemen.
ProfK
hai @MattHamilton terima kasih atas jawaban Anda - tetapi apa yang Anda maksud dengan "mereka menggunakan beberapa metode pembantu di DependencyObject."?
BKSpurgeon
2
@BKSpurgeon DependencyObject memiliki beberapa metode seperti "SetValue" dan "GetValue" yang Anda panggil untuk menyimpan / membaca nilai properti ketergantungan, daripada menggunakan bidang dukungan.
Matt Hamilton
91

Satu-satunya penjelasan yang menurut saya bermanfaat dan ditulis dengan baik adalah yang ini: http://www.wpftutorial.net/dependencyproperties.html

Pada dasarnya, DependencyProperties berbeda dari properti biasa karena mereka bukan hanya penyetel / pengambil untuk bidang di kelas, tetapi juga mengambil nilai aktualnya secara dinamis selama waktu proses. The SetValue()metode DP adalah cukup sederhana dan menetapkan nilai lokal dari properti dengan nilai yang Anda berikan. Namun, saat Anda mencoba GetValue()dari DependencyProperty, pertama-tama akan mencari nilai lokal, jika tidak ada (yang layak di DependencyProperties tidak seperti properti biasa) itu akan melanjutkan pohon UI logis sampai akan menemukan nilai tersebut. Jika framework telah mencapai puncak pohon tanpa menemukan nilai lokal apa pun, kerangka kerja akan menggunakan nilai default yang telah ditentukan sebelumnya sebagai nilai properti.

Metode ini memungkinkan DependencyProperties mengonsumsi lebih sedikit memori daripada properti biasa karena hanya nilai yang ditetapkan secara eksplisit oleh pengguna yang akan disimpan secara lokal.

Dan, seperti yang disebutkan di atas, DependencyProperties juga memungkinkan kita mengikatnya dalam kode XAML dan menyetel pemicu padanya, yang pada properti reguler tidak diizinkan.

Saya harap saya berhasil menghilangkan beberapa ketidakjelasan :)

Jonathan Perry
sumber
2
Dan apa itu "Properti Terlampir"?
Paul-Sebastian Manole
12
Properti Terlampir adalah properti yang bukan milik item saat ini yang dideklarasikan, tetapi memengaruhi objek lain. Sebagai contoh: Grid.Row="1"on a Buttonakan mengaturnya menjadi Baris # 2 pada induk Grid(karena fakta bahwa baris berbasis nol) tetapi RowDependencyProperty milik Gridobjek.
Jonathan Perry
2
Saat Anda berkata DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed, apakah maksud Anda mengikat XAML dan menyetel pemicu atau hanya menyetel pemicu tidak diperbolehkan. Terima kasih atas tindak lanjutnya dan membantu memperjelas semuanya!
Paul-Sebastian Manole
@ Paul-SebastianManole DataTriggers juga bekerja pada properti biasa. Misalkan Anda memiliki Valueproperti (Bukan DP) dengan nilai 0 dan Anda ingin tampilan Anda melakukan sesuatu saat Valuediubah ke 1. Anda akan dapat melakukannya dengan menggunakan DataTriggerdan menyetelBinding={Binding Path=Value, Value=1}
Jonathan Perry
36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ memberikan penjelasan yang baik tentang properti ketergantungan baik dalam konteks WF dan WPF.

Kutipan:

Poin Kunci - Nilai Properti Ketergantungan Terselesaikan

Tujuan akhir dari properti ketergantungan, seperti properti lainnya, adalah untuk mengelola status. Tetapi tidak seperti properti .Net normal, nilai properti lokal tidak disimpan dalam variabel instance.

Sebaliknya, properti ketergantungan didaftarkan dengan kerangka kerja properti ketergantungan, dan nilai properti yang mendasarinya diselesaikan - artinya nilai ditentukan oleh kerangka kerja properti ketergantungan berdasarkan aturan yang ditentukan oleh pendaftaran properti.

Ash M
sumber