我很高兴在WPF和Silverlight应用程序中结合C#使用Model-View-ViewModel(MVVM)模式。声明性XAML标记和数据绑定是非常宝贵的 - 我不能没有它们。但是,Harry Pierson对动态语言的this talk让我对学习动态语言感到兴奋,我想在一个新项目中尝试一下。我一直很喜欢阅读IronPython In Action,它确实包含一些WPF示例 - 但只有命令式代码。
您对在MVVM应用程序中的ViewModel和Model层使用IronPython或IronRuby有何看法(与C#相比)?哪些特征使它们具有吸引力(或没有吸引力)?我对基本优势/限制(例如AOP,鸭子打字,猴子修补,静态类型限制等)和实用的(如性能,no current IronPython Studio for v2等)感兴趣。使用C#4.0可以改善任何限制吗?
谢谢,
大卫
答案 0 :(得分:3)
Shay是对的,但仅适用于Silverlight,我没有使用过Silverlight和IronRuby。您可以使用纯IronRuby和WPF绑定和使用命令。我假设这也适用于IronPython,因为他们都使用ICustomTypeDescriptor。有一点需要注意,你需要一个比IronRuby 0.9更新的DLR版本用于活动。
要创建IronRuby命令,您需要实现事件。请参阅此SO问题了解更多Implementing and Interface in IronRuby that includes CLR Events
至于创建可以参与绑定的IronRuby对象,该交易是一个attr读取器/写入器,需要用于DLR才能将其视为属性。
class Bindable
attr :some_property, true
end
我有一些关于它的要点。 A Command Example,A simple ViewModel Example with Binding以及示例中使用的XML Builder based xaml library。这些对我有用。
有一些限制。 XamlLoader无法从CLR中看到IronRuby类。这意味着您的视图真的很愚蠢(零代码隐藏),或者它们来自C#dll。这也意味着您无法在不进入C#的情况下创建具有任何代码的自定义或用户控件。
虽然我在IronRuby / WPF中没有一个完全出炉的MVVM应用程序,但我认为所有部分都已到位且我已到达那里。
答案 1 :(得分:2)
我可以说用IronRuby编写WPF非常酷,如果你花一点时间对你的环境进行元编程,那就太棒了。
但是,有一些缺点 - 数据绑定不适用于IronRuby对象(您必须使用CLR对象 - look at my blog post来解决此问题),但这应该会改进.Net 4。
请注意IronRuby预计仅在11月进行RTM。
说了这么多,我建议你看一下。你可能会像我一样堕落:)
吉文。
答案 2 :(得分:2)
我在博客中介绍了使用WPF here尝试IronPython和MVVM的经历。这很容易上手。