2008-10-04 15 views
11

INotifyPropertyChanged, oldukça açık bir şekilde kendini açıklayıcıdır ve bence bunu ne zaman yükselteceğimi açık olarak görüyorum (yani değerleri güncellemeyi bitirdiğimde).
INotifyPropertyChanging uygularsam, olayın setterini veya nesne durumunu değiştiren başka bir yöntemi girer girmez ve daha sonra oluşabilecek koruma ve doğrulamalarla devam edersem etkinliği yükseltmeye eğilimliyim. INotifyPropertyChanging ve doğrulamaları: PropertyChanging'i ne zaman yükseltirim?

yüzden özellik değişebilir ancak henüz değiştirilmedi ve aslında başarıyla değiştirme işlemini tamamlamak olmayabilir bildirim olarak olayı tedavi ediyorum.

Nesnenin tüketicileri bu özelliği kullanıyorsa (örneğin değişiklik izleme olayını kullanarak SQL'e LINQ diyelim) ve verdiğim değerlerin doğrulandığından emin olduktan sonra etkinliği kaldırmalıyım. iyi ve nesnenin durumu değişiklik için geçerli midir?

Bu etkinlik için sözleşme nedir ve hangi yan etkiler abonelerde olacak? senin nesne özelliği için geçersiz bir değer verilir ve o zaman PropertyChanging olay yükseltmek gereken bir istisna edilirse

cevap

13

. değerinin değerinin değişeceğine karar verdiğinizde yalnızca etkinliği yükseltmelisiniz. Tipik kullanım senaryosu basit alanı değiştirdikten içindir:

public T Foo 
{ get 
    { return m_Foo; 
    } 
    set 
    { if (m_Foo == value) return; //no need for change (or notification) 
     OnPropertyChanging("Foo"); 
     m_Foo = value; 
     OnPropertyChanged("Foo"); 
    } 
} 
+0

DLINQ üzerinde çalıştığınız gibi görmek (o zaman doğru denirdi?) Bu sanırım oldukça yetkilidir. Bana gösterebileceğin bir referans var mı? –

+0

DLINQ geliştirici bölümü tarafından geliştirilmiştir (Visual Studio ekibini içerir). ADO.NET ekibi, DataSet'e LINQ ve Varlıklardan LINQ'a yol açtı. Http://msdn.microsoft.com/en-us/library/bb425822.aspx#linqtosql_topic25 –

+0

adresinde bir referans var. Teşekkürler. –

1

bir kenara - like so - PostSharp INotifyPropertyChanged otomatik uygulamak ilginç bir yeteneği vardır. tümüyle INotifyPropertyChanged uygulama önlemek istiyorsanız

+0

bu ilginç. Bir kod parçacığı kullanıyorum (ve aslında olayı tutan ve onu yükselten bir temel sınıf var) ama birileri elses sorunu olmak için ağlıyor gibi görünüyor. –

+0

Başka bir kenara göre, bu oldukça ilginç DI/IOC büyüsü ile de 'otomatik olarak uygulanabilir' olabilir - [burada görülüyor] (http://stackoverflow.com/questions/871405/why-do-i-need-an- ioc-container-karşı-karşıt-doğrudan-di-kod/1532254 # 1532254) (Ben bu konuda satmıyorum, ama başka bir şey değilse ilginç pedagojik okuma yapar) – fostandy

0

yerine Update Controls .NET kullanmayı düşünün. Bu hemen hemen tüm defter tutma kodlarını ortadan kaldırır.