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é!
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.
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.
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.
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.
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)
un schéma où la fronde(vue) et le backend(modal) communiquent (aller-retour) en utilisant un médiateur commun(Vue-modal).
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.
je dirais quelque chose comme: "modèle de Présentation pour la séparation des préoccupations entre l'interface utilisateur et la logique"
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.
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.
parce que vous ne pouvez pas lier des données à votre propre codebehind
(ne plaisantant qu'à moitié ici)