Dans MVVM, les DataTemplates sont considérés comme des vues, alors que UserControls sont des vues?

StackOverflow https://stackoverflow.com/questions/1016828

Question

Dans MVVM, chaque vue a un ViewModel. Je considère que la vue est une fenêtre, page ou contrôle utilisateur à laquelle vous pouvez associer un ViewModel à partir duquel la vue obtient ses données.

Mais un modèle de données peut également générer le rendu des données d'un modèle de vue.

Je comprends donc qu'un modèle de données est un autre "affichage", mais il semble y avoir des différences , par exemple. Windows, Pages et UserControls peuvent définir leurs propres fichiers .dll. Un type est lié à DataContect et l'autre en attachant un modèle afin que Windows, Pages, UserControls puissent être attachés à ViewModels de manière dynamique par un ServiceLocator / Container , etc.

En quoi les DataTemplates sont-ils différents de Windows / Pages / UserControls en ce qui concerne le rendu des données d'un ViewModel sur l'interface utilisateur? Et existe-t-il d'autres types de " Vues " autre que ces quatre?

Était-ce utile?

La solution

De la manière dont je l’utilise, le DataTemplate est en fait le moyen de lier la vue au ViewModel. Mes modèles de données dans MVVM ressemblent généralement à cela:

<DataTemplate DataType="{x:Type vm:FooViewModel}">
    <v:FooView />
</DataTemplate>

Autres conseils

Ce qui me semble le plus logique à ce stade de la transition vers MVVM est le suivant:

UserControls: regroupe les vues et les contrôles destinés à exécuter un processus complet pour l'utilisateur. J'utilise un contrôle utilisateur pour un tiroir coulissant que j'ai créé et qui permet à un utilisateur de parcourir différentes classifications de pièces (chaque catégorie de pièce principale acheminant l'utilisateur à travers son propre processus / assistant de sélection). Consultez également les commandes de cartographie.

Vues: Fondamentalement, une grille qui regroupe les données associées et les contrôles qui remplissent les données souhaitées au plus petit niveau afin de pouvoir les réutiliser.

Modèles de données: regroupez les informations sur les "éléments". comme dans une liste ou GridView. Je pense à cela comme à la manière dont le texte représente un objet pour lequel vous essayez d'obtenir des informations dans une liste. Ainsi, un modèle de contrôle encapsulerait les blocs du modèle de données pour contrôler le comportement d'affichage de cette collection d'éléments enveloppés dans un modèle de données.

C'est ce que je comprends, mais les limites sont très floues. J'aime le livre d'Apress Pro Expression Blend 4 de Andrew Troelson. Il ne donne cependant pas vraiment d'exemples de données volumineuses.

Je ne recommanderais pas l'utilisation d'un DataTemplate pour lier la vue au modèle de vue. Je rencontre actuellement des problèmes de performances lors de l'utilisation de cette approche car la vue est actualisée à chaque fois que celle-ci est activée. Comme vous pouvez le voir ici et ici

Malheureusement, je n'ai pas encore trouvé de meilleure option.

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