Makale Özeti

Bu makalemizde Windows Presentation Foundation (WPF) uygulamalarında veri bağlama işlemlerinin WPF Binding özelliği ile nasıl yapılacağını örneklerle incelemeye çalışacağız.

Makale

Günümüzde projelerin çoğunda kullanıcıdan alınan veriler bir yerde saklanır ve (çoğunlukla veri tabanı) daha sonra bu veriler üzerinde
değişiklikler yapılır. Örnek verecek olursak, ERP, CRM ya da bankacılık sektöründeki uygulamalar bu şekildedir. Internet bankacılığını
kullananlar, hangi mağazadan ne kadarlık alış veriş yaptıklarını, elektrik faturalarını ne zaman ödediklerini ( vs. bilgileri )
görebilirler. Windows Presentation Foundation öncesinde yazılımcılar veri modellerine uygun nesneler oluşturup veri tabanından aldıkları
verileri bu nesnelere aktarırlardı. Daha sonra bu bilgileri göstermek için de ekranda bulunan kontrollerin gerekli propertilerine
nesnelerindeki bu bilgileri atarlardı. WPF teknolojisinde binding yaklaşımı ile yukarıda bahsettiğim işlemleri yapabilmemiz sağlandı.

Binding Nedir?
Binding uygulamaların kullanıcı arayüzleri (UI) ile iş mantığı arasında bağlantı kurmayı sağlayan mekanizmadır. Binding ile
data üzerinde yapılan herhangi bir değişiklik, bu datalara bağlı kontrollerin bu değişikliğe ayak uydurmasını sağlar. Tam tersi
için de aynı durum geçerlidir. Örnek vermek gerekirse kullanıcı bir Textbox’ın değerini değiştirirse, ona bağlanmış olan veri anında
değişir. Wpf'te Binding’i kullanmak için kaynak ve hedefiniz olması gerekmektedir.

Kaynak ve Hedef Nedir?
Binding’deki hedef, propertisi DependencyProperty’den türemiş olan herhangi bir nesnedir. TextBox kontrolünün text propertisini
hedef örneği için verebiliriz. Binding’in kaynağı herhangi bir public property olabilir. UI kontrollerinin propertileri,
Common Language Runtime (CLR) objeleri, XAML elemenleri, ADO.NET DataSeti ve bunun gibi nesneler binding’deki kaynağa
örnek gösterilebilir. Şimdi biraz kodlar üzerinden bahsettiklerimizi netleştirmeye çalışalım.

XAML:
Xaml’da kullanıcının ad, soyad, email, doğum tarihi, ağırlık, açıklama bilgilerini girebilmesi için TextBox ve DatePicker, girilen
verilerin ekranda gösterilmesi için DataGrid, ekrandaki kayıtların düzenlenmesi için de bir tane düzenle butonundan oluşan
toolbar kontrolü ekledik. Binding işlemini süslü parantezler Binding içinde bulunan Binding anahtar kelimesiyle yapıyoruz.

Binding Anahtar Kelimesinin İncelenmesi::

Burada Hedef txtAdi TextBox’ının Text propertisidir. Kaynak ise “Adi” adlı bir nesnenin propertisidir.
Text={Binding ...}: Eşitliğin sol tarafı binding’den hangi propertinin etkileneceğini belirtir.
Path: Binding'in hangi propertyle yapılacağını bildirir.
UpdateSourceTrigger: Etkileşmenin ne zaman yapılacağını bildirir.

C#:

Calisan adlı bir tane class yaptık. Bu class üzerinden binding işlemini yapacağız. Bu classın propertilerine dikkatinizi çekmek istiyorum.
Xaml tarafında Binding’in Pathlerinde belirtilen bütün propertiler bu class içinde tanımlanmış durumda.

Constructor’da Calisan tipindeki yeni adlı değişkenimizi gridCalisan isimli grid layout kontrolümüzün DataContextine veriyoruz. Bu atama
sayesinde Grid layout içinde bulunan kontrollerdeki Bindingler çalışıyor. Normalde Binding tanımlaması yapılan kontrol ilk önce kendi
DataContext’ine bakar eğer null ise onu sarmalayan kontrollerin DataContext’ine bakmaya başlar. Burada TextBox, DatePicker kontrollerinin
DataContextlerine herhangi bir şey atanmamış durumda. Fakat onları sarmalayan gridCalisan isimli Grid layout controlün DataContext’i
set edildi, bu sebeple bindingler sorunsuz çalışıyor. ObservableCollection tipindeki CalisanList değişkenimizi initialize
edip dgCalisan.ItemsSource değişkenine atadık. CalisanList’in tipinin ObservableCollection olması nedeniyle listeye ekleme yapıldığı
anda dataGrid kontrolünde değişikliği hemen görebiliyoruz.

Kullanıcı tamam butonuna bastığı anda Button_Click eventi tetikleniyor. Orada gridCalisan'ın DataContext’indeki nesneyi yeniCalisan
adlı Calisan tipindeki değişkene atıp Id propertisine bakıyoruz. Eğer Id propertisi 0 ise listemize ekliyoruz ve daha sonra yeniCalisan
değişkenimize new Calisan() ile atama yapıyoruz, ve yeniCalisan objemizi gridCalisan grid layout nesnesinin DataContext ine atıyoruz,
bu sayede new Calisan ile oluşturulan nesnenin property değerleri binding sayesinde kontrollerin hedef propertilerine atanıyor.

Kullanıcı düzenle butonuna bastığında seçili olan satırı alıp yeniCalisan değişkenine atıyoruz. Bu sayede seçili olan satırdaki Calisan
tipindeki objenin propertisindeki değerler binding sayesinde kontrollerin hedef propertilerine atanıyor.

Örnek Görüntüler:


Yeni Kayıt:

Düzenleme:
Bu makalemizde veri kaynağından alınan verilerin, cs tarafında UI 'deki kontrollerin propertilerine atama yapılmadan Binding mekanizması
ile nasıl UI kontrollerinde gösterildiğini veya UI'deki kontrollere kullanıcının girdiği verilerin yine cs tarafında herhangi bir nesnenin
propertisine atama yapmadan, Xaml tarafında Binding sayesinde nasıl alınıp nesnelere aktarıldığını incelemeye çalıştık.
Bir sonraki makalede görüşmek üzere...

Sezgin Zeka
sezginzeka@gmail.com
wpf binding