Comment utiliser MVVM dans une application Windows universelle

Le modèle MVVM (Model-View-ViewModel) aide les développeurs à séparer la logique métier et de présentation d’une application de son interface utilisateur. Le maintien d’une séparation claire entre la logique d’application et l’interface utilisateur permet de résoudre les problèmes de développement et de conception, ce qui facilite le test, la maintenance et le développement d’une application. Cela peut également améliorer la réutilisabilité du code et permet à plusieurs développeurs de collaborer plus facilement lorsqu’ils travaillent sur le même projet.

1. introduction

À l’aide du modèle MVVM, l’interface utilisateur de l’application et la présentation et la logique métier sous-jacentes sont séparées en trois composants:

  • le vue Le composant encapsule l’interface utilisateur et la logique de l’interface utilisateur.
  • le voir le modèle Le composant encapsule la logique et l’état de présentation.
  • le modèle La couche encapsule la logique métier et les données de l’application.

Il existe plusieurs frameworks disponibles pour implémenter le modèle MVVM dans une application Windows. Le cadre qui convient le mieux à votre projet dépend de vos besoins. Pour ce tutoriel, nous utiliserons MVVM Lumière, un framework MVVM populaire et facile à utiliser.

Ce didacticiel vous montre comment créer une application Windows universelle avec la prise en charge de MVVM Light. Vous apprendrez à:

  • créer une application Windows universelle et ajouter la prise en charge de MVVM Light
  • implémenter la structure de répertoires
  • ajouter la couche de modèle de vue
  • câbler le contexte de données
  • implémenter le service de messagerie pour passer des messages entre les modèles de vue

2. Configuration du projet

Étape 1: créer une application Windows universelle

Commençons par créer une application Windows universelle. Sélectionner Nouveau projet du Fichier menu dans Visual Studio. Développer Modèles > Visual C # > les fenêtres > Windows 8 > Universel et sélectionnez Application vierge (Windows 8.1 universel) dans la liste des modèles de projet. Nommez votre projet et cliquez sur D’accord pour créer le projet.

Créer une application Windows universelle

Cela crée deux nouvelles applications (Windows Phone 8.1 et Windows 8.1) et un projet partagé. Les projets Windows Phone 8.1 et Windows 8.1 sont des projets spécifiques à la plate-forme et sont responsables de la création des packages d’application (.appx) ciblant les plates-formes respectives. Le projet partagé est un conteneur de code qui s’exécute sur les deux plates-formes.

Étape 2: Ajouter la prise en charge MVVM Light

Cliquez avec le bouton droit sur le nom de la solution dans le Explorateur de solution et sélectionnez Gérer les packages Nuget pour la solution.

Choisissez Gérer les packages Nuget pour la solution

Sélectionnez le Feuilleter onglet et recherchez MVVM Lumière. Sélectionnez le package MvvmLightLibs à partir des résultats de la recherche. Vérifiez les projets Windows 8.1 et Windows Phone 8.1, puis cliquez sur Installer pour ajouter les bibliothèques MVVM Light aux applications.

Rechercher et installer MvvmLightLibs

À ce stade, vous avez ajouté la prise en charge de MVVM Light à vos deux applications.

3. Structure des fichiers de projet

Une application Windows universelle qui adopte le modèle MVVM nécessite une structure de répertoires particulière. L’instantané suivant montre une structure de fichier de projet possible pour une application Windows universelle.

Structure des fichiers de projet

Permettez-moi de vous expliquer la structure du projet d’une application Windows Univesal typique qui adopte le modèle MVVM:

  • Contrôles: Ce répertoire contient des contrôles d’interface utilisateur réutilisables (vues indépendantes de l’application). Les contrôles spécifiques à la plateforme sont ajoutés directement au projet spécifique à la plateforme.
  • Cordes: Ce répertoire contient des chaînes et des ressources pour la localisation d’applications. le Cordes Le répertoire contient des répertoires séparés pour chaque langue prise en charge. le en-US Le répertoire, par exemple, contient des ressources pour la langue anglaise (US).
  • Des modèles: Dans le modèle MVVM, le modèle encapsule la logique métier et les données. En général, le modèle implémente les fonctionnalités qui facilitent la liaison des propriétés à la couche de vue. Cela signifie qu’il prend en charge les notifications “propriété modifiée” et “collection modifiée” via le INotifyPropertyChanged et INotifyCollectionChanged les interfaces.
  • VoirModèles: Le modèle de vue dans le modèle MVVM encapsule la logique de présentation et les données de la vue. Il n’a aucune référence directe à la vue ou aucune connaissance sur l’implémentation ou le type de la vue.
  • Convertisseurs: Ce répertoire contient les convertisseurs de valeur. Un convertisseur de valeur est un moyen pratique de convertir des données d’un type à un autre. Il met en œuvre le IValueConverter interface.
  • Thèmes: Le Thèmes répertoire contient des ressources de thème de type ResourceDictionary. Les ressources spécifiques à la plate-forme sont ajoutées directement au projet spécifique et les ressources partagées sont ajoutées au projet partagé.
  • Prestations de service: Cette section peut inclure des classes pour les appels de service Web, le service de navigation, etc.
  • Utils inclut des fonctions utilitaires qui peuvent être utilisées dans toute l’application. Les exemples comprennent AppCache, FileUtils, Constants, NetworkAvailability, GeoLocation, etc.
  • Vues: Ce répertoire contient les dispositions de l’interface utilisateur. Les vues spécifiques à la plateforme sont ajoutées directement au projet spécifique à la plateforme et les vues communes sont ajoutées au projet partagé.
En relation :  Comment utiliser Alexa comme assistant vocal Android par défaut

Selon le type de vue, le nom doit se terminer par:

  • La fenêtre, une fenêtre non modale
  • Dialogue, une fenêtre de dialogue (modale)
  • Page, une vue de page (principalement utilisée dans les applications Windows Phone et Windows Store)
  • Vue, une vue utilisée comme sous-vue dans une autre vue, page, fenêtre ou boîte de dialogue

Le nom d’un modèle de vue est composé du nom de la vue correspondante et du mot «Modèle». Les modèles de vue sont stockés au même emplacement dans le VoirModèles répertoire comme leurs vues correspondantes dans le Vues annuaire.

4. Ajout du calque de modèle de vue

La couche de modèle de vue implémente des propriétés et des commandes auxquelles la vue peut lier des données et notifier la vue de tout changement d’état via des événements de notification de modification. Les propriétés et commandes fournies par le modèle de vue définissent la fonctionnalité offerte par l’interface utilisateur. La liste suivante résume les caractéristiques, les tâches et les responsabilités de la couche de modèle de vue:

  • Il coordonne l’interaction de la vue avec n’importe quelle classe de modèle.
  • Le modèle de vue et les classes de modèle ont généralement une relation un-à-plusieurs.
  • Il peut convertir ou manipuler les données du modèle afin qu’elles puissent être facilement consommées par la vue.
  • Il peut définir des propriétés supplémentaires pour prendre en charge spécifiquement la vue.
  • Il définit les états logiques que la vue peut utiliser pour apporter des modifications visuelles à l’interface utilisateur.
  • Il définit les commandes et les actions que l’utilisateur peut déclencher.

Dans les étapes suivantes, nous ajoutons deux fichiers à la couche de modèle de vue, ViewModelLocator.cs et MainViewModel.cs.

Étape 1: ajoutez le MainViewModel Classe

Tout d’abord, cliquez avec le bouton droit sur le projet partagé et sélectionnez Ajouter, Nouveau dossier. Nommez le dossier VoirModèles. Ensuite, cliquez avec le bouton droit sur VoirModèles dossier et sélectionnez Ajouter, Nouvel article pour ajouter le MainViewModel classe.

Modifier le MainViewModel classe pour ressembler à ceci:

La classe contient une propriété publique HelloWorld de type string. Vous pouvez ajouter des méthodes, des propriétés observables et des commandes supplémentaires au modèle de vue.

Étape 2: ajoutez le ViewModelLocator Classe

Nous ajouterons une propriété publique pour tous les modèles de vue dans le ViewModelLocator class et créez une nouvelle ressource, que nous utiliserons dans le concepteur.

Cliquez avec le bouton droit sur VoirModèles dossier et sélectionnez Ajouter, Nouvel article. Sélectionnez une classe et nommez-la ViewModelLocator.cs. Mettre à jour le ViewModelLocator classe comme indiqué ci-dessous.

le ViewModelLocator la classe contient une propriété publique Main dont le getter retourne une instance du MainViewModel classe. Le constructeur de ViewModelLocator enregistre le MainViewModel instance à la SimpleIoc un service.

Ensuite, ouvrez App.xaml fichier et ajoutez une nouvelle ressource avec le ViewModelLocator à utiliser dans le concepteur.

5. Câblage du contexte de données

La vue et le modèle de vue peuvent être construits et associés au moment de l’exécution de plusieurs manières. L’approche la plus simple consiste pour la vue à instancier son modèle de vue correspondant en XAML. Vous pouvez également spécifier en XAML que le modèle de vue est défini comme contexte de données de la vue.

Quand le MainPage.xaml page est initialisée, une instance du MainViewModel est automatiquement construit et défini comme contexte de données de la vue. Notez que le modèle de vue doit avoir un constructeur sans paramètre par défaut pour que cette approche fonctionne.

Une autre approche consiste à créer l’instance de modèle de vue par programme dans le constructeur de la vue et à la définir comme contexte de données.

Une autre approche consiste à créer une instance de modèle de vue et à l’associer à sa vue à l’aide d’un localisateur de modèle de vue. Dans l’exemple d’application, nous utilisons le ViewModelLocator classe pour résoudre le modèle de vue pour MainPage.xaml.

Maintenant que le contexte de données de la vue a été défini sur MainViewModel class, nous pouvons accéder à ses propriétés dans la vue. Vous pouvez lier le texte d’un TextBlock à la HelloWorld propriété définie dans le modèle de vue.

En relation :  Comment utiliser Apple Music avec votre collection musicale iTunes personnelle

6. Service de messagerie

Le service de messagerie dans MVVM Light permet la communication entre les modèles de vue ou entre les modèles de vue et les vues. Supposons que vous ayez un modèle de vue utilisé pour fournir une logique métier à une fonction de recherche et deux modèles de vue sur votre page qui souhaitent traiter la recherche pour afficher la sortie. Le messager serait le moyen idéal de le faire de manière lâche.

Le modèle de vue qui obtient les données de recherche enverrait simplement un message de «recherche» qui serait consommé par tout modèle de vue actuellement enregistré pour consommer le message. Les avantages de l’utilisation d’un service de messagerie sont:

  • communication facile entre les modèles de vue sans que chaque modèle de vue ait à se connaître
  • plus de consommateurs de messages peuvent être ajoutés avec peu d’effort
  • il garde les modèles de vue simples

Pour envoyer un message:

Pour recevoir un message:

Dans l’exemple d’application, nous enverrons un message de MainViewModel, qui sera reçu par MainPage.xaml. Voici les étapes requises pour utiliser le service de messagerie.

Étape 1: créer une classe pour contenir le message à transmettre

Créez une nouvelle classe dans le projet et nommez-la ShowMessageDialog.

Étape 2: instancier la classe de message et le message de diffusion

Dans MainViewModel.cs, créez une instance de ShowMessageDialog et utilisez le Messenger objet pour diffuser le message.

Cela diffuse le message. Il ne nous reste plus qu’à enregistrer un destinataire et à répondre au message.

Étape 3: Inscrivez-vous pour le message et le traitement une fois reçu

Ouvert MainPage.xaml.cs et enregistrez-vous pour le message dans le constructeur.

ReceiveMessage est une méthode que vous devez implémenter. Il faudra le Message objet et utilisez le DialogService pour afficher une boîte de dialogue.

Étape 4: créer une commande pour envoyer un message

Maintenant que nous pouvons envoyer et recevoir un message, nous devons appeler le ShowMessage méthode. MVVM Light prend en charge RelayCommand, qui peut être utilisé pour créer des commandes dans le modèle de vue. Ajouter une propriété publique ShowMessageCommand dans le MainViewModel classe qui invoque le ShowMessage méthode.

Ensuite, ajoutez un Button à MainPage.xaml et lier le ShowMessageCommand à son Command propriété.

Déployez l’application pour voir si tout fonctionne comme prévu. Voici un aperçu de la façon dont MainPage.xaml regarde sur Windows 8.1.

Interface utilisateur MainPagexaml

Lorsque vous cliquez sur le Cliquez sur moi bouton, une boîte de dialogue apparaît.

Boîte de dialogue popup sur MainPagexaml

Messenger est un composant puissant qui peut faciliter la communication, mais il rend également le code plus difficile à déboguer car il n’est pas toujours clair à première vue quels objets reçoivent un message.

Conclusion

En implémentant le modèle MVVM, nous avons une séparation claire entre la vue, le modèle de vue et les couches de modèle. En règle générale, nous essayons de développer le modèle de vue afin qu’il ne sache rien sur la vue qu’il conduit. Cela présente de multiples avantages:

  • L’équipe de développeurs peut travailler indépendamment de l’équipe d’interface utilisateur.
  • Le modèle de vue peut être testé facilement, simplement en appelant certaines commandes et méthodes et en affirmant la valeur des propriétés.
  • Des modifications peuvent être apportées à la vue sans avoir à se soucier de l’effet qu’elle aura sur le modèle de vue et le modèle.

N’hésitez pas à télécharger les fichiers source du tutoriel à utiliser comme référence.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.