Avec MVVM et WPF, quelle serait la manière simple et directe de gérer l'ouverture et la fermeture de nouvelles fenêtres et boîtes de dialogue? L'ouverture et la fermeture doivent être pilotées par le ViewModel, n'est-ce pas? Mais le ViewModel ne devrait pas connaître la vue ...Comment gérer l'ouverture et la fermeture de nouvelles fenêtres avec MVVM?
Répondre
J'utilise généralement des interfaces pour cela. Par exemple, si je veux modifier un enregistrement dans une fenêtre séparée, j'ai une interface IEditingProvider <TViewModel>, que je peux implémenter ailleurs et ensuite passer une référence d'interface au constructeur de mon ViewModel. Le EditingProvider pourrait juste faire quelque chose comme ceci:
class MyRecordEditingProvider: IEditingProvider<MyRecordViewModel>
{
// Implementation of generic interface method
public void Edit(MyRecordViewModel model) {
EditWindow edit = new EditWindow();
edit.DataContext = model;
edit.ShowDialog();
}
}
Comment maintenez-vous les EditingProviders disponibles pour (une certaine partie de) votre application et comment récupérer l'instance correcte que vous finirez par transmettre au constructeur de ViewModel? Je suppose que tout n'est pas câblé mais découplé? – bitbonk
Oui, il est découplé. En fait, j'utilise un framework d'injection de dépendances (Composite Application Block de Microsoft) pour mapper les interfaces génériques aux implémentations. Je le fais actuellement en code, mais le conteneur Unity peut également être configuré en utilisant un fichier de configuration. – Botz3000
Avez-vous une solution compatible MVVM pour définir la propriété 'Owner' de votre EditWindow avant d'appeler ShowDialog? Si le propriétaire n'est pas défini (à la MainWindow, par exemple) le dialogue modal peut aller derrière la fenêtre principale qui est assez étrange et déroutant du point de vue de l'utilisateur. – Slauma
J'ai répondu à une question similaire dans [ce poste] (http://stackoverflow.com/a/15512972/385995). –