This article has been localized into Turkish by the community.
DataContext Kullanımı
Önceki bölümde ElementName özelliği ile belirttiğimiz gibi özellikle başka kaynak belirtilmediğinde veri bağlama için kaynağınız DataContext özelliğindeki değerdir. WPF Window gibi bir çok UI kontrolünün türetildiği FrameworkElement sınıfında tanımlanmıştır. Onu belirttiğinizde veri bağlamalarını neyi esas alacağını gösterir.
DataContext özelliği için default bir kaynak tanımlı değildir (başlangıçta değeri null), fakat DataContext kontrol hiyerarşisi üzerinden türetilerek geldiği için Window kontrolü için bir DataContext belirttiğinizde tüm alt kontrollerde de geçerli olacaktır. Hadi bunu basit bir örnekle görelim :
<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataContextSample" Height="130" Width="280">
<StackPanel Margin="15">
<WrapPanel>
<TextBlock Text="Window title: " />
<TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" />
</WrapPanel>
<WrapPanel Margin="0,10,0,0">
<TextBlock Text="Window dimensions: " />
<TextBox Text="{Binding Width}" Width="50" />
<TextBlock Text=" x " />
<TextBox Text="{Binding Height}" Width="50" />
</WrapPanel>
</StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.DataBinding
{
public partial class DataContextSample : Window
{
public DataContextSample()
{
InitializeComponent();
this.DataContext = this;
}
}
}
Bu örneğin arkaplan kodunda sadece bir satırlık bir ilave yapılıyor : standart InitalizeComponent() çağrısından sonra DataContext özelliğine "this" referansını değer olarak vererek, veri bağlamının bulunulan Window elemanının kendisi olduğunu belirtiyoruz.
XAML kodunda bunu kullanarak Title , Width ve Height gibi Window özelliklerini veri bağlamada kullanıyoruz. Window elemanı bir DataContext değerine sahip olduğu için alt elemanlarına da aynı veri bağlamı etki edecektir, bu sayede her veri bağlamada ayrı ayrı veri kaynağı belirtmek zorunda değiliz - sadece global erişilebilen değerleri kullanırız.
Uygulamayı çalıştırıp pencereyi boyutlandırmayı deneyin - boyuttaki değişim anında TextBox'lara yansıtılacaktır. Ayrıca ilk kutuda farklı bir etiket değeri girmeyi deneyebilirsiniz, ama bu anında uygulama etiketine yansımaz , kutu dışına tıklayarak fokusu ondan çıkardığınızda değişim etkili olur. Neden ? bu da sonraki bölümün konusu.
Sonuç
DataContext özelliğini kullanmak kontrol hiyerarşisinde yukarıdan aşağıya tüm veri bağlamaların temelini belirlemek gibidir. Bu sizi elle tüm veri bağlamalarda kaynak belirtmekten kurtarır, ve veri bağlamayı da gerçekten kullanmaya başladığınızda, zamandan ve yazımdan büyük oranda tasarruf edersiniz.
Bununla beraber bir pencere içindeki tüm kontroller için aynı DataContext kullanmak zorunluluğunuz yok. Her kontrolün kendi DataContext özelliği olduğu için yukarıdan gelen kalıtım zincirini istediğiniz yerde kırarak DataContext değerine yeni bir değer girebilirsiniz. Bu pencere genelinde bir genel DataContext yerine mesela bulunulan Panel yerelinde onun alt kontrollerinde geçerli bir DataContext ile çalışabilmenizi mümkün kılar.