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

0 dakikada yazıldı

21319 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!