- Katılım
- 3 Şubat 2014
- Mesajlar
- 1,744
- Tepkime puanı
- 0
- Puanları
- 0
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;
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. |