Eğer birbirinden farklı iki tipte property’i binding yapmak istiyorsanız, arada bu iki property’yi birbirlerini anlayacak şekilde haberleştiren bir yapının olması gerekmektedir. Bu yapıya da Value Converter denilmektedir. Value converter’lar sayesinde farklı tipteki property’leri bind ederek ilgili tip dönüşüm işlemlerini gerçekleştirebiliriz. En çok kullanılan value converter’lardan birisi boolean değerleri Visibility değerlerine dönüştürenlerdir. Daha fazla uzatmadan bahsettiğimiz örneği nasıl gerçekleştirebileceğimize bakalım. Öncelikle yapmam gereken bir sınıf oluşturup bu sınıfa System.Windows.Data isim uzayı altında bulunan IValueConverter arayüzünü implemente etmem gerekiyor. Sınıf ismi olarak genelde property isimleri arasına “To” ve sonuna Converter eklenerek yapılıyor. Arayüzü implemente ettiğimde hemen otomatik olarak Convert ve ConvertBack isimli metodlarım geliyor.

public class BoolToVisibilityConverter:IValueConverter  
{
   public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
   {            
       if (value != null)
       {
           bool boolValue = (bool)value;
           if (boolValue)
               return Visibility.Visible;
           return Visibility.Hidden;
       }
       return null;
   }

   public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
   {
       throw new NotImplementedException();
   }
}

Convert metodumda gelen parametreye null kontrolü yaptıktan sonra unboxing yaparak boolean bir değişkene alıyorum. Daha sonra değişkenin değerine göre Visible ya da Hidden olarak geri döndürüyorum. ConvertBack metodu ise tersine bir dönüşüm yani Visibility’den bool bir değer dönüştürme sağlamaktadır. Value converter sınıfımızı yazdığımıza göre sıra geldi kullanımına. XAML tarafında kullanabilmek için öncelikle converter’ımıza ulaşabileceğimiz bir namespace oluşturmamız gerekiyor. Daha sonra resource olarak tanımlayıp ilgili data binding işlemlerinde aşağıdaki gibi kullanabiliriz.

<Window x:Class="WPFValueConverter.MainWindow"  
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
xmlns:converter="clr-namespace:WPFValueConverter"  
Title="MainWindow" Height="350" Width="525">  
<Window.Resources>  
    <converter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter"/>
</Window.Resources>  
<StackPanel>  
    <CheckBox x:Name="cbVisible" Content="IsVisible" IsChecked="True"/>
    <Rectangle Width="200" Height="200" Fill="Red" 
Visibility="{Binding ElementName=cbVisible,  
Path=IsChecked,  
Converter={StaticResource boolToVisibilityConverter}}"/>  
</StackPanel>  
</Window>  

About the Author