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更新的任何重大变化?
/托马斯
从旧版本的 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\nprivate 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\nprivate 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 归档时间: |
|
查看次数: |
488 次 |
最近记录: |