Ahmet Çığşar | WPF Binding (Bağlama)
588
post-template-default,single,single-post,postid-588,single-format-standard,qode-quick-links-1.0,ajax_fade,page_not_loaded,,qode-theme-ver-11.0,qode-theme-bridge

WPF Binding (Bağlama)

WPF Binding (Bağlama)

WPF Binding (Bağlama) Nedir?

WPF’de Binding (bağlama) tanımı basitce iki özellik  arası ilişkisel bağlantı olarak bahsedilir. Bu tanımlama doğru olmakla birlikte WPF binding kavramını açıklamada yeterli değildir.

WPF Binding, geniş anlamıyla kullanıcı arayüzü ve arayüz elemanları ile verinin birbirine bağlanmasına ve arayüz elemanları ile verinin birlikte uyumlu çalışmasına olanak sağlayan bir mekanizmadır/yapıdır diyebiliriz.

WPF Binding ile verilerde olacak bir değişiklik bu veriye bağlanmış (bind) kontrolleri etkileyecektir aynı şekilde kontrollerde yapılacak ve veriyi etkileyecek bir durumda kontrole bağlı (bind) veride bu durumdan etkilenecektir.

Dört Basit WPF Binding Kullanımı Senaryosu

Örnek : Uygulamanızda ComboBox ile yazıların büyüklüğünü değiştirecek bir seçenek koydunuz. ComboBox’ın içerisinde 8, 10, 12 14, 16 puntoluk değerler var ve siz bu seçilen değere göre gerçek zamanlı olarak uygulamanızın yazı boyutlarınında büyütülmesini ya da küçültülmesini istiyorsunuz. Bunu binding ile yapabilirsiniz.

Örnek : Uygulamanıza bir mesaj alanı eklediniz ve 500 karaktere kadar izin veriyorsunuz ve kullanıcının mesaj yazdığı alana girdiği karakterleri sayarak kaç karakter girdiğininin görüntülenmesini istiyorsunuz. Binding ile yapabilirsiniz.

Örnek : Bir metin alanı var ve girilen her bir karakter gerçek zamanlı olarak metin alanının yanındaki Label kontrolune veya TextBox kontrolunde görüntülenmesini istiyorsunuz. Binding ile bu rahatça yapabilirsiniz.

Örnek : Resources içerisine bir Array (dizi) tanımladınız ve bu dizi elemanlarının otomatik olarak bir ComboBox içerisinde yer almasını istiyorsunuz. Binding imdadınıza yetişecektir.

Örnek 1 : Metin kutusuna (TextBox) girilen yazı etikette (Label) otomatik yazsın

Pencere oluşturalım ve penceremize bir adet TextBox ve bir adet Label ekleyelim. TextBox’a girdiğimiz veriler Label’a gerçek zamanlı olarak yazsın. Aşağıdaki XAML kodlarını inceleyelim ve açıklayalım.

<TextBox x:Name="txtYaziyorum" 
HorizontalAlignment="Left" 
Height="23" 
Margin="50,53,0,0" 
TextWrapping="Wrap" 
Text=" " 
VerticalAlignment="Top" Width="201"/>

<Label x:Name="lblOkuyorum" 
Content="{Binding ElementName=txtYaziyorum, Path=Text}"
HorizontalAlignment="Left" 
Margin="50,92,0,0" 
VerticalAlignment="Top" Width="201"/>

Aşağıdaki kod yapılarına bakalım.

<TextBox x:Name="txtYaziyorum"
<Label x:Name="lblOkuyorum"

Aşağıdaki kod bloğuna dikkat! Label kontrolune binding yapıyoruz.

Content="{Binding ElementName=txtYaziyorum, Path=Text}"

Burada Label etiketinin Content özelliği içerisine binding kodlarını yazıyoruz. Küme parantezi {} arasına Binding yazıyor ve işlemi tanımlıyoruz. ElementName ile hangi kontrole bağlanacağını belirtiyoruz Path ile bağlandığı kontrolun hangi özelliğini referans alacak bunu belirtiyoruz.

Content=”{Binding ElementName=txtYaziyorum, Path=Text}”  kodunu konuşma diline benzetirsek. “Label kontrolunun yazısını, adı txtYaziyorum olan kontrolun Text özelliğinden al” anlamındadır.

wpf-binding-textbox-ornegi


Örnek 2 : Metin kutusuna girilen metinin kaç karakterden oluştuğunu gerçek zamanlı  yazdıralım.

Bunun için penceremize bir adet metin kutusu (TextBox) ekleyelim ve adını (Name) txtMetinKutusu olarak belirleyelim ve boyutunu biraz büyütelim.  Ardından iki adet etiket (Label) ekleyelim. Label’lardan birine “Karakter Sayısı : ” yazalım diğerini ise boş bırakalım fakat Name özelliğine lblKarakterSayisi değerini verelim.

Öncelikle aşağıdaki kodları inceleyelim sonra çözümlemeye geçelim.

<TextBox x:Name="txtMetinKutusu" 
HorizontalAlignment="Left" Height="86" Margin="26,21,0,0" TextWrapping="Wrap" 
Text="" 
VerticalAlignment="Top" Width="308" />

<Label Content="Karakter Sayısı :" 
HorizontalAlignment="Left" Margin="26,112,0,0" VerticalAlignment="Top"
Width="95"/>

<Label x:Name="lblKarakterSayisi" 
Content="{Binding ElementName=txtMetinKutusu, Path=Text.Length}" 
HorizontalAlignment="Left" Margin="121,112,0,0" VerticalAlignment="Top" 
RenderTransformOrigin="0.447,0.538" Width="54" Height="26"/>

wpf-binding-karakter-say

Content="{Binding ElementName=txtMetinKutusu, Path=Text.Length}"

Diğer binding örneğinden farklı olarak burada Path olarak Text.Lenght yani yazının uzunluğunu baz aldık ve lblKarakterSayisi etiketine yazdırdık.

Sonraki yazılarımda WPF Binding’i derinlemesine ele alma planları içerisindeyim. WPF’de Binding türleri, OneWay, TwoWay,OneWayToSource, OneTime gibi binding modlarını inceleyeceğiz ve daha detaylı örnekler yapacağız.

Başka bir yazıda görüşmek üzere.

 

4 Yorum Var
  • Emre Işık
    02:32h, 24 Şubat Cevapla

    Şu binding olayının ne işe yaradığını bi türlü çözememeştim bu WPF’de teşekkürler hocam. Ayrıca İletişim kısmından bir soru yönelttim umarım müsait olduğunuz zaman cevaplayabilirsiniz..

    Siteniz çok güzel bir kaynak oluşturuyor Özellikle ben gibi WPF’e yeni sarmış kişiler için.

  • ibrahim
    01:42h, 30 Kasım Cevapla

    elinize sağlık. ben de binding’i anlama noktasında sıkıntı çekiyordum. anlamama biraz daha katkıda bulundunuz. teşekkürler.

    • Ahmet Çığşar
      09:07h, 30 Kasım Cevapla

      Teşekkürler. Binding detaylı bir konu ve projelerde farklı yerlerde kullanılabiliyor. Amacım mantığını ve ne işe yaradığını biraz olsun anlatmaktı. İşinize yaramasına sevindim.

Yorum Yapın