【问题标题】:How to use something similar to DynamicObject in Silverlight 3 / WP7?如何在 Silverlight 3 / WP7 中使用类似于 DynamicObject 的东西?
【发布时间】:2011-06-03 22:23:15
【问题描述】:

如何使用动态语言运行时 (DLR) 或其他东西来模仿 SILVERLIGHT 3 (!) 和 WP7(没有 C# 4.0!)中的 System.Dynamic.DynamicObject..

我想做的是为数据绑定实现自动动态创建的属性。

【问题讨论】:

  • 您提到了数据绑定,以防万一您还不知道:即使在 Silverlight 4 中使用 DynamicObject(或任何其他 IDynamicMetaObjectProvider),数据绑定也无法绑定到 Silverlight 中的动态对象.到目前为止,只有 WPF 4 具有该功能。

标签: windows-phone-7 silverlight-3.0 dynamic-languages


【解决方案1】:

DLR 可与 WP7 一起使用。
Iron Ruby 支持来自version 1.1 的 Windows Phone 7。

DynamicObject 在 .Net 4.0 之前可作为扩展使用

如果您喜欢使用 C# 以外的语言,那么这可能是一个选择。
http://msdn.microsoft.com/en-us/magazine/ff960707.aspx 上有一篇关于在 Windows Phone 7 上使用 IronRuby 的好文章。

作为替代方案,您可以使用匿名类型而不是动态类型吗?我假设您可能绑定的选项数量不是无限的。

如果你确实想使用匿名类型,你必须设置

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("System.Windows")]

使框架能够解析绑定。

大概您是从外部系统获取动态对象。你能不能在你的应用程序和外部系统之间添加一个包装层来将对象转换为 POCO 而不是动态对象。

【讨论】:

  • 为什么 DynamicObject 可用于 Ruby,但不能用于带有 DLR 的 C#?
  • @knom IronRuby 项目包含Microsoft.Scripting.Core 的副本,其中包含DynamicObject 您可以尝试自己包含对此的引用。
【解决方案2】:

如您所述,DLR.Net 4.0C# 4.0WP7 中不可用。这意味着你做不到。至少不容易。

Silverlight 不允许自定义标记扩展 (things between {})。所以,这也不是一个选择。

您可以做的是为绑定创建自定义Behaviors,并让它们与可以包含尽可能多的属性和值的Dictionaries 一起使用。

【讨论】:

  • 这就是问题所在..我知道行为的解决方案..但我不太喜欢它..动态语言运行时 (dlr.codeplex.com) 呢,它包含DynamicObject 也是如此。它适用于 SL3 吗??
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2019-09-09
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多