Question

J'ai été bricoler avec le modèle MVVM et maintenant je suis en train de mettre en œuvre une petite application sur cette base.

Cette application a un DataGrid dans lequel, de façon assez surprenante, certaines données sont présentées. Maintenant, je suis en train d'ajouter une certaine capacité de regroupement à elle. Je sais comment écrire ce dans le code (C # et XAML), mais je me demande dans quelle couche je devrais mettre le code responsable.

Une partie de moi me dit qu'il devrait être dans la vue, car il est particulièrement le code pour ce point de vue spécifique. Ce n'est pas générique et sert un purpos:. Regrouper les données

D'autre part, je pense que je devrais le manipuler dans le ViewModel à l'aide d'une commande. Il se sent, cependant, comme si je contamine mon ViewModel avec vue logique spécifique.

Toute ligt qui peut être versé à ce sujet?

Était-ce utile?

La solution

Dans la plupart de mes applications MVVM j'essaie de diviser les responsabilités comme ceci:

  • La vue devrait juste faire simple traduction des données ViewModel à pixels. Habituellement, cela entraîne la plupart du temps XAML et très peu en arrière de code.
  • Le viewmodel doit effectuer logique spécifique à la vue comme regroupement etc. Je souvent ai même plusieurs viewmodels par vue. Vous pouvez avoir un principal viewmodel qui expose une liste des sous-viewmodels par groupe à votre point de vue, par exemple pour mettre en œuvre le regroupement.
  • Si vous avez une logique qui applique à plus d'un viewmodel il est probablement logique domaine et devrait aller dans le modèle de domaine.

Je pense donc que le regroupement devrait aller dans le viewmodel.

Autres conseils

Il n'y a pas une réponse à cette question. Cela dépend vraiment de votre scénario:

1) Est-ce que l'utilisateur a une influence sur la question? Si elles ne le font pas, et il est un groupement fixe, je publierai une propriété avec IGrouping et utiliser le dataservice ou LINQ pour le faire avant son entrée dans la vue.

Il est généralement moins performant si vous ne groupant dans la vue, mais pas un choix clair. Si l'utilisateur peut sélectionner un grand nombre de différents groupes, cela pourrait être une valeur de pénalité à payer pour la possiblitié ..

si l'utilisateur a une certaine influence sur le regroupement je lie à un ICollectionView exposée par le ViewModel. La vue de regroupement des supports, le filtrage, le tri et la monnaie et l'interface ICollectionView est de System.ComponentModel de sorte que vous n'auriez pas à ajouter une référence « IUG » à votre projet ViewModel. De plus, le DataGrid WPF prend en charge l'interface ICollectionView.

Si l'utilisateur n'a pas d'influence sur le groupement (les groupes sont fixés) que je venais de « pré » -Groupe les données dans le modèle. HTH.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top