Makale Özeti

Bu makalemizde Windows Presentation Foundation (WPF) uygulamalarının temel yapı taşlarından olan dependency propertynin ne olduğunu, normal propertyden farkını , nerelerde kullanıldığını anlatmaya çalışacağız.

Makale

Bu makalemizde Windows Presentation Foundation (WPF) uygulamalarının temel yapı taşlarından olan dependency propertynin
ne olduğunu, normal propertyden farkını , nerelerde kullanıldığını anlatmaya çalışacağız.
Uyguluma geliştirmeyle uğraşanlar kodlarında mutlaka klasik .net property yapılarını kullanmışlardır. Dependency Property yapısı
Silverlight ve Wpf projelerinde sıkça kullanılmaktadır. Xaml tarafında kod yazanlar farkında olmadan muhakkak dependency property
yapısını kullanmışlardır.
< TextBlock Text="Dependency Property" Foreground="Red"></TextBlock>
Buradaki hem Text hem de Foreground propertyleri birer Dependency Propertydir.

Dependency Property Nedir ?
Styling, Data Binding, Animation gibi Wpf konseptleriyle etkileşim kurabilen, normal propertylerin özel bir formudur. Dependency
property etkin bellek kullanımı, property değer kalıtımı ve property değişiminin uyarılması gibi ek özelliklere destek verir.
Dependency propertyler, Dependency Object sınıfından türemiş olan classlarda tanımlanabilirler. Xaml tarafında sadece Dependency
propertyler binding hedefi olarak kullanılabilirler. Dependency propertyler Dependency Property sınıfının static register
metodu ile oluşturulurlar. Tanımlanmış olan dependency propertyler Dependency objectin dependencyobject property belleğinde saklanır.

Dependency Propertylerin Tanımlanması
Genelde dependency property olarak tanımlanacak olan değişkenler property ismi ve o ismin sonuna “Property” kelimesinin getirilmesiyle
olur. Biz de aynı şekilde Age + Property = AgeProperty şeklinde dependency property tanımladık. Normal property ile dependency
propertyi ayırt etmek için bu şekilde bir yazım şekli kullanılıyor. Static readonly olduğu için değişken sadece ya tanımlandığı
yerde ya da static constructorda set edilebilir. Daha önce belirttiğimiz gibi, Dependency propertyler DependencyProperty sınıfının
static Register fonksiyonu ile set edilirler. Register fonksiyonunda;
  • 1. parametre dependencyobject property belleğinde saklanacak olan dependency propertinin keyi
  • 2. Parametre dependency propertinin tipi
  • 3. Parametre dependency propertiyi register eden sınıfın tipi
  • 4. Parametre PropertyMetadata sınıfı
  • - 1. parametre, default değer
    - 2. parametre, propertynin değerinin değiştiğini belirten geri bildirim
    - 3. parametre, propertynin değerini exception fırlatmadan düzeltmek için yapılan geri bildirim
  • 5. Parametre ise özel validation yapmak için işaret edilen geri bildirim fonksiyonudur.
PropertyMetadata ve validation işlemini yapmak için işaret edilen geri bildirim fonksiyonu register işlemi için zorunlu olan
değişkenler değildir.

PropertyMetaData Nesnesi ve Validate Fonksiyonlarının ıncelenmesi
Dependency object sınıfının SetValue metodu çağrıldığı zaman ilk validate (AgeValidateCallback) metodu çağrılır, eğer validate metodundan
false dönerse ArgumentException nesnesi fırlatılır. 2. olarak CoerceValueCallback (AgeCoerceCallback) metodu çağrılır. Bu metodda da
propertynin değeri önceden de söylediğimiz gibi exception fırlatılmadan düzeltilir. 3. olarak ValueChangedCallbak (AgeChangedCallback)
metodu çağrılır. Bu metodda propertinin değerinin değiştiği, eski ve yeni değerlerinin ne olduğu belirtilir. GetValue metodunu da, dependency
object sınıfının dictionary içerisinde bulunan dependency propertynin değerini getirmek için kullanıyoruz. Son olarak normal property ile
dependency property sarmalanır. Artık tanımlanmış olan dependency properti ister xaml ister ister cs tarafında kullanabilir.

Bu makalemizde, dependency propertynin ne olduğunu, normal .net propertyden farkını, nasıl tanımlandığını, propertynin validation işleminin
ve istisna fırlatmadan dependency property değerinin düzeltilme işleminin nerde yapıldığını anlatmaya çalıştır. Bir sonraki makalemizde
görüşmek üzere...

Sezgin Zeka
sezginzeka@gmail.com
Dependency Property