J'ai donc un ViewModel modifiable où je ne voulais pas que ce soit modifiable via une fenêtre de dialogue.WPF: Comment fermer la boîte de dialogue cliquez sur le bouton
Normalement, la vue ViewModels affiche uniquement les données, mais vous pouvez appuyer sur un bouton Modifier qui ouvre une nouvelle fenêtre Xaml en appelant window.showDialog(). La fenêtre prend le viewModel comme DataContext, expose ses propriétés comme éditables et a les commandes Save et Cancel liées aux boutons.
Tout fonctionne bien, mais j'ai quelques problèmes avec cela.
Tout d'abord, la commande de sauvegarde fonctionne mais ne ferme pas la boîte de dialogue. Deuxièmement, cela rompt un peu le MVVM parce que la VM doit connaître la vue EditDialog pour la créer.
Également ce qui se passe lorsque je clique sur le bouton de fermeture X. Je sais qu'un dialogue retournerait normalement faux comme DialogResult mais ici je ne gère pas les résultats.
Est-ce que quelqu'un a fait quelque chose de similaire mais avec élégance en utilisant MVVM?
EDIT
J'ai aussi remarqué que si j'utilise .ShowDialog je ne peux pas modifier quoi que ce soit, même si j'expose comme TextBoxes. Est-ce dû à la façon dont les dialogues modaux sont censés fonctionner?
Ok Je ne reçois pas la solution 1 complètement. Où ouvrez-vous le dialogue alors? Aussi, je ne suis pas sûr que je serais prêt à ajouter un IWindowManager entier quand je vais seulement avoir 1 Modal au plus ouvert en plus de la fenêtre de l'application. Merci pour votre contribution. –
@ Ingó, j'ai 'IWindowManager' même si nous n'avons qu'une seule fenêtre modale. La raison d'avoir ce service est l'isolation de vos ViewModels à partir du code complètement lié à View (fenêtres de dialogue). Dans le premier scénario, j'ouvrirais le dialogue en utilisant 'IWindowManager' depuis un ViewModel externe. Disons que c'est un viewModel qui a 'EditCommand'. Cette commande devrait créer 'EditorViewModel' et l'ouvrir dans la boîte de dialogue. – Snowbear
Je considère ceci, mais cela signifierait devoir ajouter encore un autre service dans le ViewModel. Est-ce que ça gonfle avec les services n'est pas un problème?Si je pouvais laisser le conteneur le gérer, cela ne poserait aucun problème, mais le modèle est l'une des choses que j'ajoute, donc je ne peux pas résoudre un conteneur. –