2010-10-14 6 views
16

ModelView'imdeki PropertyChanged olaylarını iç içe geçmiş özelliklerden kılmanın en iyi yolunu bulmaya çalışıyorum. Mülküm PersonModelView.Address numaralı ModelView'um PersonModelView'umu aldığımı varsayalım. Address karşılığında sırayla City bir özelliği vardır. Görünümümde City'a bağlandığımda, {Binding Address.City} gibi bir şey yapardım.INotifyPropertyChanged olayları MVVM ile ViewModel özellikleri arasında kabarcıklandırmanın iyi bir yolu nedir?

Sorunum AddressINotifyPropertyChanged uygular olsa bile, PersonModelView üzerinde değilAddressPropertyChanged taşıma, çünkü bağlayıcı güncellenmez olmasıdır. veya (2) Address nesne üzerinde PersonModelView kolu PropertyChanged ve Address.City gibi bir şey ile kendi PropertyChanged refire (1) bağlama kaynağını değiştirme (veya DataContext değiştirme) Address özelliğine: Ben iki seçenek var.

Bunu nasıl çözüyorsunuz? (MVVM hafif araç kitini kullanıyorum, ancak herhangi bir yaklaşımla ilgileniyorum)

cevap

8

AddressINotifyPropertyChanged uygular ve doğru olarak onun City mülkiyet PropertyChanged olaylarını harekete geçiren o zaman bağlı olduğu mülkiyet değişti üzere olduğunu fark etmelidir bağlayıcı.

+0

Kabul ediyorum. Hiçbir zaman bir seviye ya da ikisi aşağı bir alana bağlandığında olayları yaymak zorunda kalmamıştım. Mülk adı olarak 'PropertyChanged' işlevini 'null' ile çalıştırmayı deneyin ve özellik ayarlayıcınızda ciltlemenin çalıştığından emin olun (veya çıkış penceresini kontrol edin). –

+0

Bu gerçek bir rahatlama, kodumu daha güzel hale getirmeli. Bunu ilk denediğimde bir hata yapmış olmalıyım, yeni bir çözümde tekrar yaptım ve iyi çalışıyor. Yardımınız için teşekkürler! – Geoff

1

Address nesneniz INotifyPropertyChanged uygulandı mı? Değilse, gördüğünüz sorunu düzelteceğini düşünüyorum.

Düzenleme: Üzgünüz, yazdıklarınızda bunu zaten denediğinizi belirttiniz. PersonViewModel'inizdeki Address nesnesinin PropertyChanged olayına abone olmayı denediniz mi? OnChanged, Adres nesnesinde bir PropertyChanged gerçekleştirebilirsiniz.

+0

Evet öyle. Bağlama, {Minding Address.City} bağlayıcısına sahipse, PersonModelView veya Address'deki PropertyChanged olayını işlemesi gerekir mi? (ve PersonModelView, elbette DataContext'dir) – Geoff

+0

Kodunuzu gönderebilir misiniz? Bana öyle geliyor ki, kurduğunuz şekilde işe yarayacak. Doğru şekilde bağlandığından emin olmak için 'Çıktı' penceresine baktınız mı? – JSprang

3

Burada SO bir çözüm içeren iplik var nasıl kabarcık kadar bu bildirimler için: Ancak When nesting properties that implement INotifyPropertyChanged must the parent object propogate changes?

, bir kontrol sitesinin bağlayıcı olmadan Address.City olarak ayarlandığında IIRC WPF otomatik INotifyPropertyChanged bildirimleri için Adres izlemek için istihbarat AddressView'un güncelleme bildirimlerini yeniden yayınlamaya ihtiyaç duyan PersonViewModel.

+0

Ben, bu soruyu tekrar tekrar bağlamak mı istediniz? –

+0

Erm, bence bu yanlış bağlantı;) Doğru, bir şeyleri kaçırmış olmalıyım. Bağlantıların benim için kodlara dayanamadığını düşündüm! – Geoff

+0

Oops! Bunu yakaladığın için teşekkürler. Bağlantı düzeltildi. –

İlgili konular