2010-05-23 2 views
2

J'ai un point d'entrée avec un contrôle onglet. Chaque onglet va avoir un contrôle utilisateur intégré à l'intérieur. Chaque vue incorporée hérite de la même classe de base et devra être mise à jour à mesure qu'un champ de clé sur la vue du point d'entrée est mis à jour. Je pense que la façon la plus simple de concevoir cette page est de créer et d'exposer une collection de vues au point d'entrée ViewModel afin que la vue d'entrée puisse se lier aux éléments de contrôle utilisateur en utilisant un DataTemplate dans l'onglet contrôle.Est-ce que ça va si mon ViewModel 'crée' des commandes utilisateur pouvant être liées pour mon View?

Est-il normal qu'un ViewModel instancie et fournisse des éléments d'interface utilisateur pour sa vue?

Répondre

2

Il s'agit d'une question difficile, mais la plupart des utilisateurs de MVVM la considèrent comme une odeur de code.

Le ViewModel ne devrait pas se soucier des détails d'implémentation de l'interface utilisateur. (Separation of Concerns)
Il est tout simplement hors de sa portée.

Je sais, parfois il est difficile de le faire autrement. (. Surtout avec les contrôles wih propriétés non liables telles que la propriété Document du RichTextBox)
Si vous partagiez quelques détails sur votre idée, je pourrais aller plus en détail, mais voici ce que je pense:

Qu'est-ce que vous arrête de créer ces sous-vues en XAML? Je définirais définitivement tout mon code View séparément des ViewModels. ()
Si vous définissez ces vues dans le fichier XAML du contrôle onglet, vous pouvez lier à leur objet DataContext les objets que vous souhaitez utiliser comme leur ViewModels, à partir du ViewModel du contrôle onglet. Vue.

Vous pouvez lire mes réflexions générales sur MVVM dans this answer.

+0

Merci pour la réponse. Cela a du sens. J'ai passé beaucoup de temps à apprendre MVVM récemment et j'essaie toujours de déterminer ce qui est casher ou non dans le View vs ViewModel. Votre réponse aide beaucoup - merci. –

+0

@ j0rd4n - De rien. :) J'ai utilisé MVVM (et maintenant aussi MVC) beaucoup ces derniers temps. Le point principal de MVVM est de séparer l'interface utilisateur de la logique de l'application, de sorte que ViewModels ne doit rien savoir sur les vues. – Venemo

+0

MVVM n'est pas toujours la bonne réponse. Il existe d'autres modèles comme MVC et MVP qui sont appropriés lorsque cela est nécessaire, il s'agit de l'outil approprié pour le travail. Vous pouvez traiter votre écran d'entrée comme un site Web et ses nombreuses vues comme des pages, ce qui peut vous amener à implémenter un modèle de routage MVC + sur la page de navigation. Il n'y a rien de mal à mélanger des motifs tant que tout cela a du sens, vous ne voulez pas forcer un pattern comme MVVM dans une situation où il n'appartient pas. – Agies

Questions connexes