WPF'te Dependency Property'lerde başka neler var

0 dakikada yazıldı

21013 defa okundu

Düzenle

Dün hatırlarsanız Silverlight tarafında DP (Dependency Property)'lerin kullanımına değinmiştik. Yazının sonuna doğru WPF'te aslında DP'lerin bazı ek özelliklerinin de olduğundan bahsetmiştim. Şimdi gelen o özelliklere bir göz atalım.

[C#]

        public string Adi\         {\             get { return (string)GetValue(AdiProperty); }\             set { SetValue(AdiProperty, value); }\         }\ \         public static readonly DependencyProperty AdiProperty =\             DependencyProperty.Register(\                "Adi",\                typeof(string),\                typeof(MainWindow),\           new PropertyMetadata("Varsayılan Değer",OnAdiPropertyChanged, AdiCoerceCallback), AdiValidateCallback);

Yukarıda basit şekli ile bir DP'nin tanmını görüyorsunuz. SL tarfına göre değişen kısım PropertyMetaData kısmı. Burada ilk parametremiz eğer varsa Property'nin alacağı varsayılan değer. İkinci parametre ise yine SL'de de bulunan Property binding vs yolları ile değiştiğinde çalışacak olan Callback metodu. Tüm bunlara ek olarak WPF'te PropertyMetaData'ya bir de CoerceCallback verebiliyoruz.

[C#]

        private static object AdiCoerceCallback(DependencyObject obj, object o)\         {\             string s = o as string;\             if (s.Length > 12)\                 s = s.Substring(0, 12);\             return s;\         }

CoerceCallback bize eldeki değeri bir anlamda valide edip başka bir değere mecbur kılmayı sağlıyor. Örneğin bir Slider'ın Value'sunu hiçbir zaman MaxValue'nun üzerinde bir değere set edemezsiniz. Bu gibi kontroller CoerceCallback'te yapılabiliyor.

Son olarak WPF örneğimizde farklı olan bir de ValidateCallback'imiz var.

[C#]

        private static bool AdiValidateCallback(object value)\         {\             return value != null;\         }

Adından da belli olacağı üzere burada da validasyon yapabiliyoruz. Geri döndüreceğiniz Boolean değere göre system Exception üretiyor.

WPF'teki farklılıklar bunlar, ama daha DP maceralarımız bitmedi :) Yarın devam.

Hepinize kolay gelsin!