Anasayfa

C ve Sistem Programcıları Derneği

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

menü

  • CSD Hakkında
    • Yönetim Kurulu
    • Referanslar
    • Üyelik
    • Adres
    • Kroki
    • İletişim
  • Kurslar
    • Kurs Başvurusu
    • Eğitmenler
  • Seminerler
    • Seminer İste
    • Seminer Ver
  • Kaynaklar
    • Yararlı Linkler
    • Kaynak Kod Arşivi
    • Makaleler
    • Çalışma Soruları
    • Yararlı Kitaplar
    • Dosya Arşivi
    • Döküman Arşivi
  • Duyurular
  • Haberler
  • İş İlanları
    • İş İlanı Gönder
  • SSS
  • Kurs Başvurusu

e-posta ile bilgilendirme.

Derneğimizdeki etkinliklerden haberdar olun!

Haber mektubu üyeliğiniz

Kimler çevrimiçi

Şu an 0 kullanıcı ve 3 ziyaretçi çevrimiçi.
""
dreamhost
Anasayfa

INotifyPropertyChange Arayüzü

07.05.2010 - 15:52 tarihinde aykut gönderdi
Yazan: 
Aykut Taşdelen

INotifyPropertyChange Arayüzü

Bir nesnede saklanmakta olan durum bilgisinin çeşitli sebeplerle değişimi halinde o nesnenin bind edilmiş olduğu kullanıcı arayüzündeki kontrolün de içeriğinin güncellenmesi gerekir. Bu amaçla .NET kütüphanesine INotifyPropertyChange isimli bir arayüz (interface) eklenmiştir. Bu arayüzü implemente eden bir sınıfa ilişkin nesnenin herhangi bir property’sinde değişme olursa bir event raise edilmek ve yakalanmak suretiyle bind edilen ui elemanı güncellenebilir. Aşağıdaki örnekte CStok sınıfı bu durumu örneklemektedir.

public class CStok : INotifyPropertyChanged

{
    private int m_Adet;
    public int Adet
    {
        get { return m_Adet; }
        set
        {
            m_Adet = value;
            OnChanged("Adet");
        }
    }

    private string m_Urun;
    public string Urun
    {
        get { return m_Urun; }
        set
        {
            m_Urun = value;
            OnChanged("Urun");
        }
    }

    public CStok(string urun, int adet)
    {
        m_Adet = adet;
        m_Urun = urun;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    // Bu event interface'ten geliyor

    protected void OnChanged(string prop_name)
    {
        if (this.PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(prop_name));
        }
    }
}

Bu sınıf görseldeki TextBox’lara programatik olarak bind edilmiştir.
<Window x:Class="csd.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <TextBox Name="txtUrun"  />
        <TextBox Name="txtAdet"  />
        <Button Name="button1" Click="button1_Click">Test</Button>
    </Grid>
</Window

Butona tıklandığında Adet property’sine yeni değer atanmakta ve bağlı kontrol de aynı anda değişim göstermektedir.

public partial class Window1 : Window
{
    CStok stok = new CStok("Buzdolabı", 13);

    public Window1()
    {
        InitializeComponent();

        txtUrun.Text = stok.Urun;
        txtAdet.Text = stok.Adet.ToString();

        stok.PropertyChanged += new
             System.ComponentModel.PropertyChangedEventHandler
             (stok_PropertyChanged);
    }

    void stok_PropertyChanged(object sender,
          System.ComponentModel.PropertyChangedEventArgs e)
    {
        switch (e.PropertyName)
        {
            case "Urun":
                txtUrun.Text = stok.Urun;
                break;
            case "Adet":
                txtAdet.Text = stok.Adet.ToString();
                break;
        }
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        // Butona basılınca ilgili textbox yei değer atandığı için değişir
        stok.Adet = 30;
    }
}

Aykut TAŞDELEN

C ve Sistem Programcıları Derneği Eğitmeni

aykut.tasdelen@csystem.org

  • Yazıcı uyumluYazıcı uyumlu
  • Arkadaşa gönderArkadaşa gönder
  • PDFPDF

Adres: 2.Taşocağı Cd. Oğuz Sk. Barbaros Apt. No: 11/4 PK: 34387  Mecidiyeköy / İSTANBUL Tel: (212) 274 63 60  (212) 274 99 89  (212) 275 88 97  (212) 288 35 20 Fax: (212) 275 88 97 E-Posta: csystem@csystem.org

İçerik yayınları
Fervens Drupal theme by Leow Kah Thong. Designed by Design Disease and brought to you by Smashing Magazine.