http://mvvmlight.codeplex.com/SourceControl/changeset/changes/17256019ad97
最初一切正常,但galaSoft的消息传递在某种程度上被破坏了.
消息被发送,但接收器从未接收(使用Messenger.Default.Register).
没有构建警告/错误,输出窗口中没有错误.
是否有人知道有关新MVVM Light SL5更新的任何重大变化?
/托马斯
解决方法
要解决此问题,请尝试使用.Register()重载,并将receiveDerivedMessagesToo设置为true.
当Send()为其创建某种类型的DynamicProxy的对象时,可能会发生此问题.例如,当您在数据上下文的任何集合下使用Local属性时,EntityFramework将执行此操作.
例如ctx.Dealers.Local的EntityFramework DBContext将生成一个类似于以下类型的项目列表:
System.Data.Entity.DynamicProxies.Dealer_D4CEAA0F527F5360DEB9B2B35305241B76A107C37B9DB8B368984B7DF69AEE1E
当匹配到已注册的监听器时,Messenger.SendToTargetorType()将失败,因为已注册的类型只是“经销商”而不是经销商的代理.
为什么这个曾经工作而不需要将receiveDerivedMessagesToo设置为true而现在不行?
以前MVVM Light“Messenger.cs”Messenger.SendToTargetorType()有这样的代码:
private void SendToTargetorType<TMessage>(TMessage message,Type messagetargettype,object token) { var messageType = typeof(TMessage);
这很有效,因为传递的数据的实际类型无关紧要,只是注册类型的类型.
现在代码已更改为:
private void SendToTargetorType<TMessage>(TMessage message,object token) { Type messageType = message.GetType();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。