Framework 4.5 Preview ile gelen yeni özellikler sayesinde artık WPF uygulamalarımızda statik özellikler ile veri bağlama işlemleri gerçekleştirebilmekteyiz. Hatta bu statik özelliklerimizin değeri her değiştiğinde haberdar olabilmemiz için statik bir olay tanımlamamız da mümkün. Özelliğimizin değişiminden haberdar olmamız için tanımlayacağımız statik olay MSDN de de belirtildiği gibi iki şekilde olabilir.

  • public static event EventHandler MyPropertyChanged;
  • public static event EventHandler StaticPropertyChanged;

İkisinin arasındaki tek fark eğer sadece bir tane statik özelliğinizi veri bağlama işleminde kullanacaksanız ilk tanımlamayı kullanabilirsiniz fakat birden fazla statik özellik kullanacaksanız ikinci tanımlamayı kullanmalısınız. Çünkü ilk tanımlama için birden fazla özellik kullanacaksanız her bir özellik için ayrı ayrı PropertyChanged olayı tanımlaması yapmanız gerekecektir. Jenerik tanımlamada ise tek bir olaya parametre olarak özellik adını vererek çok daha sade ve basit bir şekilde gerçekleştirmiş oluruz. Bu kadar açıklamadan sonra gelin bu özelliğimizi nasıl kullanacağımıza bakalım ve aşağıdaki gibi bir sınıfımız olduğunu düşünelim.

public class MyClass  
{
    private static string myProperty="This is static property text";       
    public static string MyProperty 
    {
        get
        {
            return myProperty;
        }
        set 
        {
            myProperty = value;
            NotifyPropertyChange("MyProperty");
        }
    }

    public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
    public static void NotifyPropertyChange(string propertyName)
    {
        EventHandler<PropertyChangedEventArgs> handler = StaticPropertyChanged;
        if (handler != null)            
            handler(null, new PropertyChangedEventArgs(propertyName));
    }        
}

Daha sonra statik olan MyProperty adındaki özelliğimizi XAML tarafında bağlarken önce aşağıdaki gibi MyClass sınıfımızdan bir nesne üretmeliyiz.

<Window x:Class="WPF_StaticProperties.MainWindow"  
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WPF_StaticProperties"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:MyClass x:Key="MyClassInstance" />
    </Window.Resources><Grid>
</Grid>  
</Window>  

Artık MyClass tipinde bir nesne örneğini ürettikten sonra veri bağlama işleminde şu şekilde kullanabiliriz.

<StackPanel>  
    <TextBox x:Name="txtBox" HorizontalAlignment="Center"
                     Width="200"  Margin="5"/>
     <TextBlock Width="200" Text="{Binding MyProperty, Source={StaticResource MyClassInstance}}" Margin="5" HorizontalAlignment="Center"/>
      <Button Content="Change Static Property"
                    Width="150"
                    Height="50"
                    HorizontalAlignment="Center"
                    Click="Button_Click" />
 </StackPanel>

XAML tarafındaki butonumuzun click olayında da TextBox kontrolümüze girdiğimiz metni statik özelliğimize atayalım. Bu sayede özelliğimizin değerinin değiştiğini haber veren olayın da çalışıp çalışmadığını gözlemleyebiliriz.

private void Button_Click(object sender, RoutedEventArgs e)  
{
    MyClass.MyProperty = txtBox.Text;
}

WPF 4.5 Preview ile gelen bu özelliğimizden de kısaca bahsettik. Bir sonraki özelliğimizde görüşmek üzere.

About the Author