C# Programlama WPF Form Örnekleri

WPF DataBinding ve INotifyPropertyChanged Kullanımı

WPF temelli uygulamaların en güçlü olduğu konulardan biri elbette “DataBinding” adı verilen veri bağlama mekanizmasıdır.

Bilindiği üzere MVVM (Model-View-View-Model) tasarım kalıbı üzerine inşa edilmiş windows platformları (WPF, Store App, Windows Phone, SilverLight) sunum katmanınızla, uygulama verileriniz arasında çift yönlü senkron veri taşıyabilen “DataBinding” yapısını kullanırlar. Şimdi bu mekanizmanın nasıl kullanıldığına bir bakalım;

databinding_1

İlk olarak uygulama arayüzünü tasarlayalım.

Arayüz tasarımında  dikkat edeceğimiz bazı hususlar var;

1- Listeleme yapacak olan “lst1” isimli listbox’ın template edilmiş olması. <ListBox>…</Listbox> etiketleri arasında <Listbox.ItemTemplate> ile listbox’ın her bir satırının <DataTemplate>  ile bildirilen satır tasarımına sahip olacağı bildirilmiştir. Bu bildirimin içinde tasarımınıza uygun herhangi bir layout tercihinde bulunabilirsiniz. Örneğimiz için <StackPanel> içinde <Image> ve <TextBox> kullandık.

2-<DataTemplate> için kullanılan kontrollerimizde {Binding} bildirimleri ile hedeflenen özelliğe, gösterimi yapılacak olan nesnenin özelliği bağlanmıştır.

Sırada “Person” isimli sınıfımızı “Person.cs” isimli dosyada oluşturalım.

Sınıf tasarımı normalden biraz farklı olarak “INotifyPropertyChanged” isimli arayüzden türetilmiş olmalıdır. Bu arayüz (interface) şablonuna uygulanmış sınıfların özelliklerinde bir değişim olduğunda yapısında bulunan “PropertyChanged” olayını (event) tetikler. Tabiki bu tetikleme sınıfın özelliklerindeki “set” bloğunda yapılmalıdır. Yukarıda bulunan sınıf örneğimizde “img” isimli özelliğin “set” bloğunda yani bir değer girişi gerçekleştriğinde “propchanged” isimli metoda parametre olarak özelliğin adını metinsel olarak vermektedir. “propchanged(string prop)” metodu “INotifyPropertyChanged” arayüzü ile sınıfımıza dahil olan “PropertyChangedEventHandler” tipindeki “PropertyChanged” olayını (event) tetikleyerek özellik değişimini bildirmektedir.

Bu sayede uygulama arayüzündeki kontrollerimize {binding} ile bağlanmış olan özelliklerin değişiminide gerçekleştirmektedir.

Uygulamanın MainWindow.cs tarafında ise “lst1” isimli Listbox’a kaynak olacak <Person> nesnelerini içinde barındıracak koleksiyonumuzu “ObservableCollection<Person>” tipinde oluşturuyoruz.

ListBox’ın “ItemsSource” özelliğine “persons” koleksiyonumuzu bildirerek veri bağlantısını gerçekleştiriyoruz.

Bu aşamadan sonra koleksiyonda yapılacak değişiklikler (Add, Remove) veya koleksiyon içindeki objelerimizde yapılacak herhangi bir özellik değişikliği sonucu ListBox haberdar edilecek ve görünüm tarafında senkron olarak işlenecektir.

Örneğimizin “MainWindow.cs” kodlarını aşağıda bulabilirsiniz.

Aynı şekilde uygulamanın arayüzünde bulunan ID ve Name değerlerini ekranda gösterecek ve değişiklik yapma imkanı sunacak TextBox, Image kontrollerinin de ilgili özelliklerine {Binding} yapıldığını görebilirsiniz. Koleksiyonların ItemSource özelliği yerine bu türden detay gösterimleri için hedef alınan nesneyi kontrollere sahiplik yapan layout’un (Örneğimizde <Grid> kullanıldı) “DataContext” özelliğine bildirilerek sağlanır.

Uygulamanın yapılış videosu:

3 Yorum

Ahmet C için bir yanıt yazın X

Web Tasarım & Programlama sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya devam et