Explication d'une phrase au MVVM dans WPF?

j'ai entendu le son de la prochaine meilleure chose dans la construction de WPF de l'Isu, mais tous les les exemples ont des douzaines de lignes de code - puis-je obtenir un Hello World pour MVVM qui explique en termes clairs de quoi il s'agit? Je suis assez nouveau à C# / .net aussi, alors peut-être m'indiquer à certains des ressources qui pourraient aussi aider?

Beaucoup apprécié!

33
demandé sur Martin Harris 2009-07-20 16:02:15

11 réponses

explication d'une phrase:

MVVM est une réimagination du modèle bien aimé Model-View-Presenter (MVP) qui est conçu pour fonctionner particulièrement bien avec les installations de liaison de données fournies avec WPF pour séparer la logique d'application de la conception D'UI.

Plus de, plus utile, explication:

le concept de base de la MVVM est la séparation d'une application du FPF en composantes distinctes dont chacune a une responsabilité dans le processus d'obtenir de l'information sur écran.

tout d'Abord vous avez le modèle. Il s'agit d'une classe avec des fonctionnalités très limitées qui est généralement remplie à partir d'une source extérieure telle qu'une base de données ou un service web. Par exemple:

public class MessageModel
{
    public string Message { get; set; }
}

en plus de cela, vous superposez le ViewModel, c'est là que se situe la logique de l'application, elle notifie la vue des modifications au Modèle et assure la cohérence des données. En mettant en œuvre l'interface bidirectionnelle INotifyPropertyChanged databinding entre le vue est donnée gratuitement par WPF:

public class MessageViewModel : INotifyPropertyChanged
{
     private MessageModel _model;

     public string Message
     {
          get { return _model.Message; }
          set
          {
              if (_model.Message != value)
              {
                  _model.Message = value;
                  OnPropertyChanged("Message");
              }
          }
     }
}

Enfin, vous avez la Vue. C'est un fichier xaml qui décrit la disposition des contrôles utilisés pour afficher et modifier les données dans le ViewModel:

<Canvas>
     <TextBox Text={"Binding Message"} />
</Canvas>

la raison pour laquelle vous allez à tous ces efforts est que le modèle est très léger et facilement passé au-delà des limites du domaine. Il est simple de l'envoyer ou de le recevoir d'un service web ou de l'associer à une table de base de données. Le modèle de vue, d'autre part est complexe, mais a peu dépendances - il ne se soucie pas où le modèle obtient ses données, seulement qu'il est là et il n'a pas de concept d'une vue du tout ce qui le rend très testable (la logique de votre application ne dépend pas D'une interface utilisateur pour tester). Enfin le xaml est bien compartimenté et peut être remis à un concepteur qui n'a pas besoin de connaître la logique de l'application, seulement que le ViewModel présentera certaines données sous certains noms. Cette encapsulation rend très facile la définition des rôles dans les grandes des projets, ou mettre en place une interface utilisateur limitée pour tester la logique pendant que la vraie est en cours de finition.

71
répondu Martin Harris 2011-05-03 20:14:37

MVVM est une relation star-fan. Le fan connaît la star mais la star ne connaît pas le fan. Le fan aime tellement sa star que si la star change de lui-même ( je veux dire son style vestimentaire ), le fan change lui-même en conséquence.

remplacez maintenant "star" par "ViewModel" et "fan" par "View" et relisez-le.

37
répondu Abdulsattar Mohammed 2010-02-07 08:44:10

Une phrase? Va ici.

MVVM est un modèle de ségrégation de L'UI où le Xaml (View) se lie à une façade (View Model) permettant aux tripes de votre programme (Model) d'éviter que les préoccupations de L'UI s'infiltrent dans une couche.

14
répondu Ball 2009-07-20 12:16:53

l'énoncé simple qui m'a aidé à me concentrer sur ce qu'il y avait de mieux était "Est-ce que je pourrais tester ma logique d'entreprise sans l'interface utilisateur?"Je pense que c'est la question que vous devez poser lors de l'apprentissage et de la conception en utilisant les concepts MVVM.

8
répondu billb 2009-07-20 12:23:06

ce site a un grand diagramme qui l'explique.

Fondamentalement, vous avez 3 composants:

1)Modèle - Le modèle de données de votre application. c'est assez standard et identique à n'importe quelle application MVP ou MVC.

2) View - le XAML qui définit la vue/layout de votre application.

3)Modèle De Vue - parce que la WPF exige que le point de vue s'attache aux choses d'une certaine façon (comme exige que collections mettre en œuvre INotifyCollectionChanged et des trucs comme ça) il exige normalement que vous massez vos données un peu pour l'obtenir dans une forme appropriée pour la vue à l'affichage. C'est là que les codes de modèle de vue. Elle paquets de données dans des modèles de vue que la vue peut facilement afficher. C'est ce à quoi votre vue XAML se liera. Il doit répondre aux événements de la couche model et se mettre à jour.

(puis vos contrôleurs s'accrochent quelque part sur le côté-idéalement en utilisant WPF les commandes et faire des changements pour le modèle, ce qui déclenche des événements pour mettre à jour le modèle de vue)

4
répondu Simon P Stevens 2009-07-20 12:09:08

un schéma où la fronde(vue) et le backend(modal) communiquent (aller-retour) en utilisant un médiateur commun(Vue-modal).

1
répondu gilbertc 2009-07-20 16:40:07

le MVVM pattern est lorsque L'interface utilisateur se connecte avec un objet intermédiaire XAML-friendly pour obtenir vos données réelles xaml-unfriendly.

1
répondu djcouchycouch 2009-07-20 21:28:27

je dirais quelque chose comme: "modèle de Présentation pour la séparation des préoccupations entre l'interface utilisateur et la logique"

0
répondu Hrvoje Hudo 2009-07-20 12:18:42

une réponse améliorée:

MVVM est tout au sujet de l'avenir; vous voulez séparer votre logique d'application du cadre de sorte que soit le cadre peut évoluer, et votre application peut ne pas avoir à changer, ou votre application peut évoluer et vous n'aurez pas à vous soucier tant de changer les aspects D'UI réels.

en fait, MVVM est un raffinement d'un modèle qui existe depuis un certain temps. Je me souviens de l'évolution du modèle quand je travaillais à MFC. Il y a au moins deux les raisons de le faire. MFC ou <> est assez complexe, et le mélange des constructions MFC avec votre logique d'application rend l'application assez fragile. Exemple: remplacer une listbox par un combobox (ou un sélecteur en termes modernes) est beaucoup plus difficile si la logique pour supporter le contenu de la liste/sélecteur est combinée avec la logique pour manipuler la liste/sélecteur lui-même.

0
répondu kmontgom 2009-07-20 16:30:39

quelques très bonnes explications d'une phrase (ou proches de celle-ci) déjà. Je vais juste ajouter à cela en disant que si vous êtes passé le niveau de base et vous voulez un exemple de la façon d'utiliser MVVM dans une application du monde réel qui a des menus, barre d'outils, dialogues d'options, fenêtres d'outils d'accostage, etc., prendre un coup d'oeil à Soapbox Core et démonstration à l'aide de la boîte à savon de Base. Il est ouvert de sorte que vous pouvez obtenir beaucoup d'idées.

0
répondu Scott Whitlock 2009-11-10 03:43:54

parce que vous ne pouvez pas lier des données à votre propre codebehind

(ne plaisantant qu'à moitié ici)

0
répondu JasonRShaver 2011-05-31 17:27:24