SL5更新后MVVM轻松消息被破坏了吗?

use*_*368 5 silverlight mvvm-light silverlight-5.0

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

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

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

/托马斯

Tol*_*lga 0

从旧版本的 MVVM Light 升级时(更改集 3bdbffb4e70a \xe2\x80\x9cBL0014 Misc\xe2\x80\x9d),我也遇到过同样的事情。Send() 立即停止工作。

\n\n

要解决此问题,请尝试使用 .Register() 重载,并将 receiveDerivedMessagesToo 设置为 true。

\n\n

当 Send()ing 对象创建了某种类型的 DynamicProxy 时,可能会发生此问题。例如,当您在数据上下文的任何集合下使用 Local 属性时,EntityFramework 将执行此操作。

\n\n

例如,ctx.Dealers.Local 的 EntityFramework DBContext 将生成类似以下类型的项目列表:\n System.Data.Entity.DynamicProxies.Dealer_D4CEAA0F527F5360DEB9B2B35305241B76A107C37B9DB8B368984B7DF69AEE1E

\n\n

当与注册监听器匹配时,Messenger.SendToTargetOrType() 将失败,因为注册类型只是“经销商”而不是经销商的代理。

\n\n

为什么以前不需要将 receiveDerivedMessagesToo 设置为 true 就可以工作,而现在却不行了?

\n\n

以前的 MVVM Light“Messenger.cs”Messenger.SendToTargetOrType() 有以下代码:

\n\n
private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token) \n{ \n  var messageType = typeof(TMessage); \n
Run Code Online (Sandbox Code Playgroud)\n\n

这非常有效,因为传递的数据的实际类型并不重要,只需注册类型的类型即可。

\n\n

现在代码已更改为:

\n\n
private void SendToTargetOrType<TMessage>(TMessage message, Type messageTargetType, object token)\n{\n  Type messageType = message.GetType();\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在正在使用参数的类型。这是一个问题,因为如果您的“消息”是某种类型的代理,则注册侦听器的搜索将失败。

\n