2009-09-22 7 views
2

J'ai été très heureux d'utiliser le modèle Model-View-ViewModel (MVVM) dans les applications WPF et Silverlight en combinaison avec C#. Le balisage XAML déclaratif et la liaison de données sont inestimables - je ne peux pas vivre sans eux. Mais, this talk par Harry Pierson sur les langues dynamiques m'a excité d'apprendre une langue dynamique, et j'aimerais en essayer un dans un nouveau projet. J'ai apprécié lire IronPython In Action, et il contient quelques exemples WPF - mais seulement avec un code de style impératif.IronPython ou IronRuby sont-ils adaptés au modèle MVVM dans WPF/Silverlight?

Quelles sont vos réflexions sur l'utilisation ou IronPython IronRuby au niveau des couches ViewModel et modèle dans les applications MVVM (par rapport à C#)? Quelles caractéristiques les rendent attractifs (ou peu attrayants)? Je m'intéresse aux avantages/limitations fondamentaux (par exemple, AOP, typage de canard, correction de singe, limitations de type statique, etc.) et pratiques (par exemple, performance, no current IronPython Studio for v2, etc.). Est-ce que les limitations s'amélioreront avec C# 4.0?

Merci,

David

Répondre

2

Je peux dire que l'écriture WPF avec IronRuby est assez cool, et si vous investissez un peu de temps Méta votre environnement, il peut être impressionnant.

Cependant, il y a des inconvénients - la liaison de données ne fonctionne pas avec des objets IronRuby (vous devez utiliser des objets CLR pour que - look at my blog post pour la solution de contournement), mais cela devrait améliorer le .Net 4.

Faites attention IronRuby ne devrait passer à RTM qu'en novembre.

Ceci étant dit, je ne recommande que vous le vérifier. Vous pourriez tomber pour cela comme je l'ai :)

Shay.

3

Shay est juste, mais seulement pour Silverlight et je n'ai pas utilisé Silverlight et IronRuby. Vous pouvez lier et utiliser des commandes avec IronRuby pur et WPF. Je suppose que cela s'applique également à IronPython car ils utilisent tous les deux ICustomTypeDescriptor. Il y a une mise en garde, vous aurez besoin d'une version DLR plus récente que IronRuby 0.9 pour les événements.

Pour créer une commande IronRuby, vous devez mettre en œuvre des événements. Voir cette question SO pour plus Implementing and Interface in IronRuby that includes CLR Events

En ce qui concerne la création d'un objet IronRuby pouvant participer à la liaison, l'accord est un lecteur/enregistreur Attr qui doit être utilisé par le DLR pour le voir comme une propriété.

class Bindable 
    attr :some_property, true 
end 

J'ai quelques idées à ce sujet. A Command Example, A simple ViewModel Example with Binding Et le XML Builder based xaml library utilisé dans les exemples. Cela a fonctionné pour moi.

Il existe des limitations. XamlLoader ne peut pas voir les classes IronRuby du CLR. Cela signifie que vos vues sont vraiment stupides (zéro code-behind), ou qu'ils proviennent d'un DLL C#. Cela signifie également que vous ne pouvez pas créer de contrôles personnalisés ou utilisateur qui ont du code derrière sans passer par C#.

Bien que je n'ai pas une application MVVM complètement cuit dans IronRuby/WPF, je pense que toutes les pièces sont en place et je reçois là-bas.

2

J'ai blogué sur mes expériences et essayer IronPython MVVM avec WPF here. C'était étonnamment facile d'y aller.

Questions connexes