微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverlight – SL5更新后MVVM光消息破损?

我刚刚将SL4应用程序升级到SL5.我为SL 5下载了MVVM light toolkit源代码并构建它:
http://mvvmlight.codeplex.com/SourceControl/changeset/changes/17256019ad97

最初一切正常,但galaSoft的消息传递在某种程度上被破坏了.
消息被发送,但接收器从未接收(使用Messenger.Default.Register).
没有构建警告/错误,输出窗口中没有错误.

是否有人知道有关新MVVM Light SL5更新的任何重大变化?

/托马斯

解决方法

从旧版本的MVVM Light(更改集3bdbffb4e70a“BL0014 Misc”)升级时,我发生了同样的事情.瞬间发送()停止工作.

解决此问题,请尝试使用.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();

现在改为使用参数的类型.这是一个问题,因为如果您的“消息”属于某种类型的代理,则对Registed侦听器的搜索将失败.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐