La création d'un MVVM sympathique boîte de dialogue stratégie de
Je suis en train de créer une stratégie pour gérer les formulaires de menu contextuel pour une utilisation tout au long de la partie de mon application. Ma compréhension est que j'ai besoin d'un seul UserControl
dans la racine de mon MainWindow. Ce sera lié à sa propre ViewModel qui permettra de gérer les messages qui sont envoyés à l'intérieur de l'app.
Je suis en utilisant MVVM Light, et je suis assez nouveau dans le Messenger
classe.
Imaginer un Maître/Détails du scénario, où une liste d'un des objets contenus dans une ListBox
. En sélectionnant l'un de ces éléments et en cliquant sur un bouton de modification d'affichage, une UserControl
qui couvre la totalité de l'écran. L'utilisateur peut ensuite modifier l'élément sélectionné, et cliquez sur OK pour valider la modification.
Je veux le UserControl
qui est ouvert à de "générique" d'une manière que je peux jeter tout (probablement un ViewModel) à elle... pour elle de rendre le ViewModel via un DataTemplate
et de gérer toutes les modifications de l'objet. Cliquez sur OK pour rappel pour l'envoi de la classe et à la persistance de la modifier comme avant.
Certaines situations où cela serait utile sont...
- Afficher les messages d'erreur, sans la saisie de l'utilisateur (autre que OK pour la fermer)
- Affichage d'un formulaire d'édition d'un élément de données
- Boîtes de dialogue de Confirmation (un peu comme un standard MessageBox)
Quelqu'un peut-il fournir tous les exemples de code de comment je pourrais réaliser ce?
Vous devez vous connecter pour publier un commentaire.
Lors de la conception d'une INTERFACE utilisateur avec MVVM l'objectif est de séparer les préoccupations de la Vue au cœur des préoccupations du ViewModel. Idéalement, le ViewModel ne doivent pas compter sur un quelconque point de vue des composants. Cependant, c'est l'idal et une autre règle de MVVM est que vous devez concevoir votre application comme vous le souhaitez.
Dans la zone de la prestation d'un service en montrant les dialogues il y a deux approches différentes flottant autour de:
Les deux approches s'appuient sur une interface qui définit les fonctionnalités du service fournit. La mise en œuvre de ce Service est ensuite injecté dans le ViewModel.
Aussi, faire les deux approches ont leurs avantages et inconvénients.
Une autre solution possible est d'utiliser la messagerie pour afficher les boîtes de dialogue.
Quelle que soit l'approche que vous utilisez essayer de garder la Vue et le ViewModel de-couplé à l'aide d'un IoC (inversion of control) modèle, c'est à dire définir une interface de sorte que vous pouvez utiliser différentes implémentations. Pour lier les services dans le ViewModel utilisation de l'injection, c'est à dire passer le service dans le constructeur du ViewModel ou par la définition d'une propriété.
J'ai récemment commencé à apprendre le MVVM pour une application WPF, j'étais en train de créer, j'ai utilisé cette l'article en tant que base pour montrer les boîtes de dialogue, si vous téléchargez l'exemple de projet alors qu'il est en fait tout à fait une belle découplé de la méthode, il est bien captée et d'obtenir une vue vous de passer une instance d'un viewmodel. J'ai prolongé un peu pour mes propres moyens, j'ai aussi utilisé la WPFExtendedToolkit MessageBox pour les avertissements, erreurs, etc parce que la norme win32 MessageBox est moche.
En ce qui concerne la dynamique des formes, alors vous aurez envie d'étudier la ItemsControl, et dans votre Viewmodel une Collection d'Éléments de Données qui doivent être modifiés par l'utilisateur pour le ItemsControl à lier. J'ai une boîte de dialogue de modification des actions et de leurs paramètres dans un système de workflow designer lorsque la boîte de dialogue liste d'actions a été totalement dynamique. Cela a été fait par l'exposition d'une collection de mes articles avec leurs types de données pour que je puisse ensuite utiliser un DataTemplateSelector pour sélectionner les DataTemplates qui contient les types appropriés de contrôles, c'est à dire un type de données DateTime a montré un DatePicker.
Espère Que Ça Aide
Du point de vue d'un développeur de venir s 'maintenir' que le code générique, il sonne comme une douleur. À partir de ce que vous avez décrit, je voudrais lui donner la forme et de la boîte de dialogue du même modèle de vue et de créer un spécifique XAML modèle de la boîte de dialogue que vous souhaitez afficher.