2

我一直非常乐意在 WPF 和 Silverlight 应用程序中结合 C# 使用 Model-View-ViewModel (MVVM) 模式。声明式 XAML 标记和数据绑定非常宝贵——没有它们我就活不下去。但是, Harry Pierson 关于动态语言的演讲让我对学习动态语言感到兴奋,我想在一个新项目中尝试一下。我一直很喜欢阅读IronPython In Action,它确实包含一些 WPF 示例 - 但仅包含命令式代码。

您对在 MVVM 应用程序的 ViewModel 和 Model 层使用 IronPython 或 IronRuby 有何看法(与 C# 相比)?哪些特征使它们有吸引力(或没有吸引力)?我对基本优势/限制(例如 AOP、鸭子类型、猴子修补、静态类型限制等)和实际的类似(例如性能、当前没有适用于 v2 的 IronPython Studio等)感兴趣。C# 4.0 会改进任何限制吗?

谢谢,

大卫

4

3 回答 3

3

Shay 是对的,但仅适用于 Silverlight,我没有使用过 Silverlight 和 IronRuby。您可以使用纯 IronRuby 和 WPF 绑定和使用命令。我假设这也适用于 IronPython,因为它们都使用 ICustomTypeDescriptor。有一个警告,您需要一个比 IronRuby 0.9 更新的 DLR 版本来进行事件。

要创建 IronRuby 命令,您需要实现事件。有关包含 CLR 事件的 IronRuby 中的更多实现和接口,请参阅此 SO 问题

至于创建一个可以参与绑定的 IronRuby 对象,交易是一个 attr 读取器/写入器,需要用于 DLR 才能将其视为属性。

class Bindable
  attr :some_property, true
end

我有一些关于它的要点。一个命令示例,一个带有绑定的简单 ViewModel 示例以及示例中使用的基于 XML Builder 的 xaml 库。这些对我有用。

有限制。XamlLoader 无法从 CLR 中看到 IronRuby 类。这意味着您的视图非常愚蠢(零代码隐藏),或者它们来自 C# dll。这也意味着如果不使用 C#,就无法创建包含任何代码的自定义或用户控件。

虽然我在 IronRuby/WPF 中没有一个完全成熟的 MVVM 应用程序,但我认为所有的部分都已准备就绪,而且我已经完成了。

于 2009-09-22T12:37:14.550 回答
2

我在博客上写了我在此处尝试使用 WPF 的 IronPython 和 MVVM 的经验。出乎意料地容易上手。

于 2010-10-06T16:35:34.520 回答
2

我可以说使用 IronRuby 编写 WPF 非常酷,如果您花一点时间对您的环境进行元编程,它会非常棒。

但是,也有缺点 - 数据绑定不适用于 IronRuby 对象(您必须为此使用 CLR 对象 -请查看我的博客文章以了解解决方法),但这应该在 .Net 4 上有所改进。

请注意,IronRuby 预计仅在 11 月才能进入 RTM。

说了这么多,还是推荐大家看看。你可能会像我一样爱上它:)

谢伊。

于 2009-09-22T09:37:31.293 回答