2013-04-15 4 views
7

Belirli bir sınıfta değişiklik olduğunda bazı olayları tetiklemek mümkün mü?Bir sınıfta bir şey değiştiğinde bir olayı tetikleme

E.g. 100 alanlarına sahip bir sınıfım var ve bunlardan biri harici olarak veya dahili olarak değiştiriliyor. Şimdi bu olayı yakalamak istiyorum. Bu nasıl yapılır?

Gerçekten çok uzun sınıflar için bunu hızlı bir şekilde yapmanın bir hilesi olup olmadığını merak ediyorum.

+0

Hata ayıklama için mi, yoksa kullanıcı arabirimini mi güncelleştirmek için mi? Cevap buna göre değişecektir. –

+0

UI'yi güncellemek ve diğer pek çok şeyi yapmak için – Nickon

cevap

13

En iyi yöntem olarak, manuel özelliklerine genel alanları dönüştürmek ve uygulamak senin bir değişiklik event yükseltmek amacıyla INotifyPropertyChangedinterface ile class.

DÜZENLEME: 100 alanları söz Çünkü bu büyük cevap gibi kodunuzu refactor öneririm:

private string _customerNameValue = String.Empty; 
public string CustomerName 
{ 
    get 
    { 
     return this._customerNameValue; 
    } 

    set 
    { 
     if (value != this._customerNameValue) 
     { 
      this._customerNameValue = value; 
      NotifyPropertyChanged(); 
     } 
    } 
} 
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Kontrol şuna: Burada Tools for refactoring C# public fields into properties

bunun bir örneğidir: INotifyPropertyChanged Interface

+0

Bundan korkuyordum her alanı manuel olarak değiştirmem gerekiyor: S – Nickon

+2

Kodunuzu Rafactor! Bunun ne kadar kolay olduğuna bakın: [C# ortak alanların özelliklerine yeniden yerleştirilmesi için araçlar] (http://stackoverflow.com/questions/1028679/tools-for-refactoring-c-sharp-public-fields-into-properties) –

+1

Ayrıca check out Bu soruya verilen tüm cevaplar (http://stackoverflow.com/questions/1315621/implementing-inotifypropertychanged-does-a-better-way-exist). – TylerOhlsen