Bağımlılık özelliği nedir?


Yanıtlar:


94

Bağımlılık özellikleri, DependencyObject öğesinden türetilen sınıfların özellikleridir ve değerlerini depolamak için yalnızca bir destek alanı kullanmak yerine, DependencyObject üzerinde bazı yardımcı yöntemler kullanırlar.

Onlarla ilgili en güzel şey, veri bağlama için tüm tesisatlara sahip olmalarıdır. Onlara bir şey bağlarsanız, değiştiklerinde bunu bildireceklerdir.


36
Bu bana hala bir bağımlılık özelliğinin neler yapabileceği veya neden var olduğu hakkında çok az şey anlatıyor. En değerli özelliklerinden hiçbir şeyden bahsetmiyorsunuz, öğe ağacında değer çözünürlüğü.
ProfK

selam @MattHamilton Cevabınız için teşekkür ederim - ama "DependencyObject üzerinde bazı yardımcı yöntemler kullanıyorlar" derken ne demek istiyorsun?
BKSpurgeon

2
@BKSpurgeon DependencyObject, bir destek alanı kullanmak yerine bir bağımlılık özelliğinin değerini kaydetmek / okumak için çağırdığınız "SetValue" ve "GetValue" gibi bazı yöntemlere sahiptir.
Matt Hamilton

91

Yararlı ve iyi yazılmış bulduğum tek açıklama şudur: http://www.wpftutorial.net/dependencyproperties.html

Temel olarak, DependencyProperties, sınıftaki alanlar için yalnızca ayarlayıcı / alıcı değil, aynı zamanda gerçek değerlerini çalışma sırasında dinamik olarak almaları nedeniyle normal özelliklerden farklıdır. SetValue()Görüntü yönetmenleri yöntem oldukça basittir ve bunu verdi değere özelliğinin yerel değerini ayarlar. Ancak, GetValue()bir DependencyProperty denediğinizde , ilk önce yerel bir değer arayacaktır, eğer hiçbiri yoksa (normal özelliklerin aksine DependencyProperties'de uygulanabilir), bu tür bir değer bulana kadar mantıksal UI ağacına kadar devam edecektir. Çerçeve herhangi bir yerel değer bulmadan ağacın tepesine ulaşmışsa, özelliğin değeri olarak önceden tanımlanmış bir varsayılan değer kullanır.

Bu yöntem, yalnızca kullanıcı tarafından açıkça ayarlanan değerler yerel olarak depolanacağı için DependencyProperties'in normal özelliklerden daha az bellek tüketmesine izin verir.

Ve yukarıda belirtildiği gibi, DependencyProperties ayrıca XAML kodunda onlara bağlanmamıza ve bunlar üzerinde normal özelliklere izin verilmeyen tetikleyiciler ayarlamamıza izin verir.

Umarım bazı belirsizlikleri temizlemeyi başardım :)


2
Peki "Ekli Mülk" nedir?
Paul-Sebastian Manole

12
Ekli Özellik, bildirilmekte olan geçerli öğeye ait olmayan, ancak başka bir nesneyi etkileyen bir özelliktir. Örneğin: Grid.Row="1"bir Buttonistekte, üst Gridsatırda Satır # 2'de olacak şekilde ayarlanır (satırların sıfır temelli olması nedeniyle), ancak RowDependencyProperty Gridnesneye aittir .
Jonathan Perry

2
Söylediğinizde DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed, hem XAML'de bağlanmaya hem de tetikleyicileri ayarlamaya mı, yoksa yalnızca tetikleyicileri ayarlamaya izin mi verdiniz? Takip ettiğiniz ve işleri daha net hale getirdiğiniz için teşekkür ederiz!
Paul-Sebastian Manole

@ Paul-SebastianManole DataTriggers düzenli özellikler üzerinde de çalışır. Let Büyük çaplı bir demek Value0 değerine sahip özelliğini (Not DP) ve zaman görünümü bir şey yapmak istiyorum Value1'e değişiklikler kullanarak bunu yapmak mümkün olacak DataTriggerve ayarBinding={Binding Path=Value, Value=1}
Jonathan Perry

36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ , hem WF hem de WPF bağlamında bağımlılık özelliklerinin iyi bir açıklamasını sunar.

Bir alıntı:

Önemli Nokta - Bağımlılık Özelliklerinin Değeri Çözüldü

Bir bağımlılık mülkünün nihai amacı, herhangi bir mülk gibi, devleti yönetmektir. Ancak normal .Net özelliklerinin aksine, yerel özellik değeri bir örnek değişkeninde depolanmaz.

Bunun yerine, bağımlılık özellikleri bağımlılık özelliği çerçevesine kaydedilir ve temeldeki özellik değeri çözümlenir - yani değer, özellik kaydı tarafından tanımlanan kurallara dayalı olarak bağımlılık özelliği çerçevesi tarafından belirlenir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.