2011-12-12 24 views
5

SL4 uygulamamı SL5'e yükseltdim. Ben SL 5 için MVVM ışık araç kaynağını indirilen ve onu inşa: http://mvvmlight.codeplex.com/SourceControl/changeset/changes/17256019ad97MVVM ışıklı mesajlaşma bozuk mu?

Başlangıçta her şey iyi çalışır, ancak GalaSoft mesajlaşma nasılsa bozuldu. İleti gönderilir, ancak alıcı tarafından hiçbir zaman alınmaz (Messenger.Default.Register kullanılarak). Çıkış penceresinde herhangi bir uyarı/hata ve hata yok.

Yeni MVVM Light SL5 güncellemesiyle ilgili herhangi bir kırılma değişikliğinin farkında olan var mı?

/Thomas

+3

Lütfen bana laurent (at) galasoft (dot) ch adresinden bir repro gönderiniz, araştırmak istiyorum. Teşekkürler! – LBugnion

+0

En son MVVM ışık 3'ü yükleyiciden Silverlight 5 ile kullanıyorum ve mesajlaşma hala çalışıyor, bu yüzden kurulumunuzdan gelmesi gerekiyor. – jv42

+0

Kırık gördüğüm görülen tek şey, "RaisePropertyChanged()" idi, ancak bu, LBugnion'un blogunda belgelendi. – jv42

cevap

0

MVVM Işık (değiştir seti 3bdbffb4e70a “BL0014 Çeşitli”) eski bir sürümüne yükseltme yaparken aynı şey benim başıma yaşadım. Anında Gönder() çalışmayı durdurdu.

Sorunu çözmek için, true olarak getDerivedMessagesToo ayarlı .Register() yüklemesini kullanarak kullanmayı deneyin.

Bu sorun, bunlar için oluşturulmuş bir tür DynamicProxy içeren nesneleri (Send) oluşturduğunda oluşabilir. Örneğin, EntityFramework, yerel özelliğinizi veri içeriğinizin koleksiyonlarından herhangi birinde kullandığınızda bunu yapar.

örn. System.Data.Entity.DynamicProxies.Dealer_D4CEAA0F527F5360DEB9B2B35305241B76A107C37B9DB8B368984B7DF69AEE1E

(Kayıtlı Dinleyiciler Messenger.SendToTargetOrType için eşleştirme) beri başarısız olur: ctx.Dealers.Local için EntityFramework DBContext benziyor tip maddelerin bir listesini oluşturacaktır Kayıtlı Tip sadece bir "Bayi" dir ve satıcının bir Proxy'si değildir.

Neden bu, getDerivedMessagesToo öğesini true olarak ayarlamaya gerek duymadan çalışmaya devam etti ve şimdi değil? veri geçirilen fiili tipi, sicil sadece tipini önemli değildi çünkü

private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token) 
{ 
    var messageType = typeof(TMessage); 

Bu büyük çalıştı:

Önceden MVVM Işık "Messenger.cs" Messenger.SendToTargetOrType() bu kodu vardı yazın.

private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token) 
{ 
    Type messageType = message.GetType(); 

Şimdi parametrenin tipi yerine kullanılıyor:

Şimdi kod olarak değiştirildi. Bu bir sorundur, çünkü "mesajınız" bir çeşit proxy'ye sahipse, Kayıtlı dinleyicilerin araması başarısız olur.