Makale Özeti

Wpf uygulamalarında xaml tarafında data binding işleminin işlerimizi ne kadar kolaylaştırdığını daha önceki makalelerimizde bahsetmiştik. Bazen data binding işleminde daha güçlü bir araca ihtiyaç duyarız. Mesela binding yapacağımız property ya bir nesne ise o zaman ne yapmamız gerekiyor? İşte bu durumlarda Value Converter işlemi yardımımıza yetişiyor.

Makale

Wpf uygulamalarında xaml tarafında data binding işleminin işlerimizi ne kadar kolaylaştırdığını daha önceki makalelerimizde bahsetmiştik. Bazen
data binding işleminde daha güçlü bir araca ihtiyaç duyarız. Mesela binding yapacağımız property ya bir nesne ise o zaman ne yapmamız
gerekiyor? İşte bu durumlarda Value Converter işlemi yardımımıza yetişiyor.

Value Converter nedir ve nerelerde kullanılır?
Value converterlar kaynaktaki verinin hedefte gösterilmeden önce dönüştürülmesi ve hedefteki yeni değerin kaynakta uygulanmadan önce dönüştürülmesi
işlemlerini yerine getirir. Value Converterlar aşağıdaki şekillerde kullanılabilir.
- Verinin string gösterimini yapmak için formatlanmasında, Örnek: Sayıyı para birimi gösteriminde
- Belirli bir tipte Wpf object oluşturmada, Örnek: Binary datadan Image nesnesine bind etmek için BitmapImage objesi oluşturmada
- Property nin değerini bind edilen nesneye göre değiştirmede.Örnek: Bir nesnenin background propertisini başka bir nesnenin değeri değiştiğinde değiştirmede.

Value Converter Nasıl Oluşturulur?
1. IvalueConverter interface'ini uygulayan bir sınıf oluşturuyoruz.
2. Oluşturduğumuz sınıfa ValueConversion attribute'u ekleyip kaynak ve hedef veri tiplerini belirtiyoruz.
3. Kaynaktaki datanın orginal formatından gösterim formatına çevirmesi için Convert() methodunu uyguluyoruz.
4. Hedefteki gösterim formatını kaynaktaki normal formatına çevirmesi için ConvertBack() methodunu uyguluyoruz.

ColorOption ve SelectedValueToColor Sınıfları

Gördüğünüz gibi ColorOption sınıfımız Id, Name propertilerinden oluşan basit bir sınıf. Bu sınıfı comboboxın itemsourceunu doldurmada kullanacağız.

ValueConvertion attribute'unda kaynağın ColorOption hedefin de SolidColorBrush tipinde olacağını belirtiyoruz. Convert metodunda gelen object değerin
ColorOption tipinde olup olmadığına bakıyoruz. Eğer ColorOption nesnesi tipindeyse, gelen nesnenin Idsine göre belli renklerde SolidColorBrush
nesnesi döndürüyoruz. Dönüş tipinden anlışılacağı gibi bu converterı Background, Foreground gibi propertylerde kullanılmak için yazıyoruz.

Xaml

Bir tane combobox ve bir tane stackpanel oluşturduk. Comboboxtan seçilen değere göre stackpanelin background propertisinin değişmesini converter sayesinde
sağlıyoruz. En dıştaki StackPanel resourcunun altına SelectedValueToColor resource'unu tanımlayıp ve key'ini belirliyoruz. Daha sonra stackpanelin
Background propertisinin tanımlanan comboboxın SelectedValue propertisine bağlı olarak değişeceğini belirtiyoruz. Buradaki Binding'i tanımlarken Value
Converter aracını kullacağımızı belirtmek için Converter keywordunu Binding keywordü içinde kullanıyoruz.

Combobox nesnesinin itemsource'unu ColorOption ObservableCollection listesiyle dolduruyoruz. Artık comboboxtan hangi rengi seçersek stackpanelin backgroundu
o renkte oluyor.

Örnek Ekran Görüntüleri


Value Converter'ın ne olduğunu, nerelerde kullanıldığını, nasıl tanımlandığını anlatmaya çalıştık. Bir sonraki makalemizde görüşmek üzere...

Sezgin Zeka
sezginzeka@gmail.com