Je travaille également sur un projet MVVM où j'ai besoin de boîtes de dialogue modales ou de boîtes de message. J'ai trouvé la façon de le résoudre:
Le logiciel utilise une seule fenêtre. L'élément racine de mise en page est une grille sans définition de ligne ou de colonne. La grille a trois enfants:
- Un dockpanel qui contient tous les trucs habituels comme les menus, les onglets, la barre d'état, etc.
- Une grille qui a un fond gris et une opacité de 50%. Ceci est utilisé comme un voile pour couvrir le dockpanel lorsqu'une boîte modale est en vigueur. La grille de voile est généralement effondrée.
- Une grille contenant des vues modales, elle est généralement réduite.
Le modèle de vue pour la fenêtre principale a un membre appelé Modal. Si cela est nul, les deux grilles pour une utilisation modale sont réduits grâce à la liaison de données et un convertisseur pour Visibility.Collapsed.
Lorsque le programme veut afficher par exemple une boîte de message modal, un MessageBoxViewModel est instancié et affecté à MainViewModel.Modal. Le MessageBoxViewModel a une commande pour un bouton OK. Cette commande déclenche un événement qui définit à nouveau le MainViewModel.Modal à null.
La grille de voile ferme le DockPanel principal, de sorte qu'aucun contrôle en dehors du contrôle Modal n'accepte d'entrée.
Votre programme peut exécuter un messagepump jusqu'à ce que vous appuyez sur OK, ou le OK de commande peut déclencher l'autre. Il existe plusieurs façons de résoudre différents besoins, mais la solution Model-ModelView devrait les supporter.
Je pense que c'est aussi bon modèle de la vue dans le mode modal que l'on peut espérer.
outrepasser Peut-être un gestionnaire OnvisibilityChanged dans le code-behind de la fenêtre d'erreur? – bluebit