11
votes

Approche standard du lancement des dialogues / Windows enfants d'une application WPF à l'aide de MVVM

Tout, je voudrais connaître la meilleure approche / industrie reconnue de la boîte de dialogue [enfant] / Windows d'un WPF à l'aide du motif MVVM. J'ai rencontré les articles suivants:

A. codeProject - Afficher des dialogues lors de l'utilisation du motif MVVM

Cette approche me semble bon, mais excessif. C'est un certain degré de réplication de code et je ne suis pas convaincu que c'est la bonne façon d'y aller.

b. WPF MVVM et afficher des dialogues

Cela va brièvement par trois options avec différents liens qui sont tous assez / très pauvres à expliquer la méthodologie ou sont de-sujet.

Quelqu'un peut-il proposer une explication de la méthode Standard du lancement de la boîte de dialogue d'une application WPF à l'aide de MVVM et de préférence des liens vers un matériau de lecture supplémentaire? Si vous pouvez vous fournir un exemple vous-même, je serais bien sûr le plus appréciatif!

Merci pour votre temps.


1 commentaires

Il n'y a pas de standard de l'industrie et il est peu probable qu'il soit un. La solution la plus couramment acceptée consiste à utiliser un service de dialogue.


6 Réponses :


1
votes

Créer un service de dialogue a bien fonctionné pour moi et est également suggéré dans vos liens.

Plus tard, j'ai vu la même solution aux jours de développement de une présentation MVVM de Gill Cleren . Vérifiez le lien pour les échantillons de code de travail (bien que écrit pour le métro)

Une seule chose qui me nagonne un peu sur le service de dialogue est qu'il s'agit d'une manière d'une manière ou d'une autre, dépendante de la technologie d'interface utilisateur (client riche).

Une simple réponse Web de demande de requête peut être construite sur le même point de vue et le même code de modèle que le WPF XAML se lie à. Jusqu'à ce que la vue de la vue commence à faire apparaître des dialogues via le service de dialogue. Je ne saurais pas comment implémenter le service de dialogue pour une vue Web. Mise en œuvre des dialogues Il faudrait appuyer un peu plus logique à la vue.


0 commentaires

0
votes

Le but d'utiliser l'interface pour implémenter des dialogues est de rendre le code testable. Dans ce cas, "A" est largement utilisé, mais il est toujours difficile de dire "standard". Si vous n'avez pas de test sur votre viewModel ou que vous pouvez tester votre viewModel, évitez de toucher des boîtes de dialogue, telles que l'utilisation d'extrait de remplacement, vous pouvez certainement ne pas suivre l'instruction.


0 commentaires

10
votes

Tout d'abord, je ne connais aucun moyen de "standard de l'industrie" pour montrer des dialogues à l'aide de MVVM car il n'y a pas de tel.
Deuxièmement, bienvenue à MVVM, vous venez de toucher les zones que MVVM n'a pas de standard pour.
Pour vous dire la vérité, MVVM a de nombreux points de douleur et c'est la raison pour laquelle il y a des tonnes de frameworks MVVM, juste pour mentionner quelques tonnes de lumière, prisme, caliburn.micro, cinch, catel, waf, babouin, shell i arrêtez-vous ou vous voulez plus.
Maintenant, pour répondre à votre question et après avoir eu affaire à la plupart de ces cadres, j'ai remarqué un point commun, ils utilisent tous un conteneur DI / IOO, puis vous offrent une interface, quelque chose comme IdialogManager et une mise en œuvre de leur propre, puis ils vous demandent. Pour accepter cette interface dans votre modèle de vue et utilisez-la pour afficher des dialogues. Donc, pour résumer cela, j'utiliserais une injection de dépendance, d'une interface pour afficher des dialogues, puis de la fournir et de la mise en œuvre de cela, et de l'enregistrer avec le conteneur di conteneur, puis de le consommer de mon modèle ou de mes vues.
edit: Vous avez donc choisi Prism (qui à mon avis) est le plus difficile entre eux dans la présentation de dialogues. Maintenant que c'est de côté, il y a le moyen difficile qui utilise Demandes d'interaction (Vérifiez le milieu de l'article) , ou vous pouvez utiliser ce répond comme une manière plus rapide.


1 commentaires

Je ne suis pas plus proche de prendre une décision sur une mise en œuvre. Je veux emménager dans la direction que vous suggérez et que vous avez téléchargé prisme. Cependant, en regardant le code source, je ne peux pas voir les modules que vous référenciez. Pouvez-vous fournir une référence explicite aux classes du prisme dont j'ai besoin d'inspecter?



2
votes

Récemment, j'ai mis en place mon propre service de navigation pour WPF, qui utilise Windowmanager de Caliburn.Micro (mais vous pourriez la remplacer par quelque chose d'autre).

EXEMPLE (Comment utiliser): xxx

Mise en œuvre: xxx

xxx


0 commentaires

2
votes

La dernière version de Prism ( télécharger ici ) Contient une "mise en œuvre de référence" d'une application MVVM intitulée "Trader STOCK". Ma justification était que si l'équipe du prisme l'appelle une "mise en œuvre de référence", c'est la plus "standard" de leur point de vue (si quelque chose dans MVVM est standard) et le choix logique à appuyer sur.

La source contient une bibliothèque d'infrastructures pour augmenter les dialogues modales, et c'est plutôt bien. J'ai donc adopté cette bibliothèque et je l'ai déployé avec succès (j'ai téléchargé une telle application à CodePlex).

Je devais modifier le code à 1 Ajoutez l'icône du parent à la barre de titre car la bibliothèque ne l'a pas fournie; et [2] Ajoutez un texte significatif à la barre de titre car la bibliothèque l'a laissée en blanc et [3] ajoutez un délégué à invoquer lorsque la boîte de dialogue se ferme. Il est résumé dans la mesure où un VM peut soulever une boîte de dialogue en passant deux chaînes (c'est-à-dire les noms d'enregistrement de l'unité) à un médiateur. Ces changements sont disponibles sur CodePlex.

Donc, parmi toutes les autres "normes", "la mise en œuvre de référence" devrait participer minime comme un choix viable. La réponse plus oblique à votre question est que si vos modèles de vue sont suffisamment isolés et fonctionnent entièrement à travers des interfaces POCO, alors en théorie, cela ne devrait pas avoir d'importance car la commutation à une autre «norme» devrait être un exercice trivial.


4 commentaires

Pouvez-vous vous faire référence à votre application sur CodePlex? Merci beaucoup pour votre temps, il est le plus apprécié.


Tyburnphotobrowser.CodePlex.com Le code pertinent pour ma réponse est dans l'infrastructure \ comportement et également dans une ressource Dictionnaire dans le répertoire principal de l'application. N'oubliez pas de définir votre cible sur 4.5


Une chose rapide de Garry. Dans Winforms (même pour les grandes applications), j'ai rarement besoin de diviser des solutions en plusieurs projets. Dans votre solution, vous divisez les composants en un grand nombre de projets distincts, pourquoi? Je ne critique pas, mais véritablement aime comprendre les meilleures pratiques ici. Merci encore.


S'il y a trop d'assemblages pour accueillir votre style, vous pouvez les combiner. Sur CodePlex, cependant, les gens aiment généralement résoudre un problème très spécifique (comme l'ouverture d'une boîte de dialogue :)) et souhaitent forcer à l'assemblage pertinent sans l'encombrement du refactoring mégalithique. En outre, je suis un grand fan de l'isolement car il est facile à tester et facile à «réutiliser». Je suis assez heureux de prendre le succès de la performance lorsque VS charge le projet en faveur de la qualité de la conception. Veuillez lire @jerryjvl Réponse: Stackoverflow .com / questions / 1192004 / ...