2008-11-04 14 views
3

Je travaille sur une application WPF dont l'arborescence représente un XML. Je charge le XML sur le XDocument, puis lie le TreeView à cet objet.ViewModel au-dessus de XDocument

Maintenant, en utilisant le MVVM pattern, je veux fournir un ViewModel au-dessus de XDocument. Quelles sont certaines des choses que je devrais implémenter dans la classe ViewModel.

Je pense,

  1. RoutedCommands qui se lient à ContextMenu commandes sur le TreeView pour permettre d'ajouter le noeud, noeud supprimer, modifier noeud etc
  2. Logic pour modifier réellement les attributs et nodenames sur la vue.

Est-ce que je vais dans la bonne direction? Que dois-je faire d'autre pour le rendre plus propre, modulaire et facile à comprendre.

Dois-je utiliser RoutedCommands ou implémenter l'interface ICommand et créer mes commandes? Comment utiliser les propriétés jointes pour CommandBindings? Est-ce logique de le faire dans l'application treeview dont je parle? Je suis un peu débordé à cause des nombreuses options disponibles pour l'implémenter.

Est-ce que quelqu'un a des liens, un exemple de code qui fait ce genre de chose? Une implémentation de référence peut être?

Répondre

1

Je suis avec vous. J'ai commencé avec

(ui) < -> (xml)

où xml représentée comme LINQy XElements alors je suis notification PropertyChange. J'ai ensuite ajouté quelques classes auxiliaires sans état pour m'aider à gérer xml (exposer les propriétés, valider les données, etc.). Je regrouperais XElements dans ObservableCollections afin que je puisse les lier.

Lisez à propos de M-V-VM, et j'ai décidé de convertir mes classes auxiliaires en ViewModels. Problèmes: Les classes d'assistance résident dans l'espace de noms du modèle de données qui ne connaît rien à l'interface utilisateur. Les classes d'assistance savent comment convertir la ligne de base de données en XElement, ViewModel ne devrait jamais voir cela. Les classes d'aide traitent avec xml. ViewModel ne devrait pas savoir ou s'en soucier.

Je suis en fait envisager la mise en œuvre

(ui) < -> (viewmodel) < -> (aide) < -> (xml)

mais je rechigne à des événements de collecte PropChange en aide seulement pour les sur-relancer dans viewmodel.