2011-12-12 6 views
5

Acabo de actualizar mi aplicación SL4 a SL5. Descargué la fuente de MVVM light toolkit para SL 5 y la compilo: http://mvvmlight.codeplex.com/SourceControl/changeset/changes/17256019ad97¿Los mensajes ligeros de MVVM se rompieron después de la actualización de SL5?

Inicialmente todo funciona bien, pero la mensajería de GalaSoft se rompe de alguna manera. El mensaje se envía, pero nunca lo recoge el receptor (utilizando Messenger.Default.Register). No hay advertencias/errores de compilación y no hay errores en la ventana de resultados.

¿Alguien está enterado de algún cambio de rotura en relación con la nueva actualización de MVVM Light SL5?

/Thomas

+3

¿Puede por favor enviarme una repro en laurent (at) galasoft (punto) ch, quiero investigar. ¡Gracias! – LBugnion

+0

Estoy usando la última MVVM light 3 del instalador con Silverlight 5, y la mensajería aún funciona, por lo que debe venir de su configuración. – jv42

+0

Lo único que vi roto fue en 'RaisePropertyChanged()', pero eso estaba documentado en el blog de @ LBugnion. – jv42

Respuesta

0

que he tenido lo mismo sucedió a mí cuando se actualiza desde una versión anterior de MVVM Light (modificar conjunto 3bdbffb4e70a “BL0014 Otra información”). Instantáneamente Enviar() dejó de funcionar.

Para resolver el problema, intente utilizar la sobrecarga de .Register() con receiveDerivedMessagesToo establecido en verdadero.

Este problema puede ocurrir cuando Send() ing objetos que tienen algún tipo de DynamicProxy creado para ellos. Por ejemplo, EntityFramework lo hará cuando use la propiedad Local debajo de cualquiera de las colecciones de su contexto de datos.

p. Ej. ADO.NET Entity Framework para DBContext ctx.Dealers.Local generará una lista de elementos del tipo que se parecen: System.Data.Entity.DynamicProxies.Dealer_D4CEAA0F527F5360DEB9B2B35305241B76A107C37B9DB8B368984B7DF69AEE1E

Cuando juego a los oyentes Messenger.SendToTargetOrType registrados() fallará ya que la El tipo registrado es solo un "distribuidor" y no un representante del distribuidor.

¿Por qué esto solía funcionar sin requerir receiveDerivedMessagesToo establecido en verdadero y ahora no?

Anteriormente MVVM Light "Messenger.cs" Messenger.SendToTargetOrType() tenía este código:

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

Esto funcionó de maravilla ya que el tipo real de que se pasan los datos no importaba, sólo el tipo de la registed tipo.

Ahora el código se ha cambiado a:

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

Ahora el tipo del parámetro se está utilizando en su lugar. Esto es un problema ya que si su "mensaje" es de algún tipo de proxy, la búsqueda de oyentes registrados fallará.

Cuestiones relacionadas