Boîte de dialogue ouvrir dans WPF MVVM

J'ai une application qui a besoin d'ouvrir une boîte de dialogue à partir d'un bouton où l'utilisateur entre des informations.

Pour le moment je fais comme ça (qui fonctionne correctement)

  • Cliquez sur le bouton génère une commande dans le ViewModel.
  • Le ViewModel déclenche un événement auquel le Contrôleur écoute.
  • Le Contrôleur, les détails de la nouvelle fenêtre (c'est à dire de la Vue, ViewModel & modèle) et l'ouvre (ShowDialog)
  • Lorsque la fenêtre est fermée le Contrôleur ajoute le résultat à la eventargs et retourne dans le ViewModel
  • Le ViewModel transmet les informations sur le Modèle.

Il y a beaucoup d'étapes, mais ils ont tous un sens et il n'y a pas beaucoup de frappe.

Le code ressemble à ceci (la fenêtre vous demande le nom de l'utilisateur)

ViewModel:

AskUserNameCommand = DelegateCommand(AskUserNameExecute);
...

public event EventHandler<AskUserEventArgs> AskUserName;

void AskUserNameExecute(object arg) {
    var e = new AskUserNameEventArgs();
    AskUserName(this, e);
    mModel.SetUserName(e.UserName);
}

Contrôleur:

mViewModel.AskUserName += (sender,e) => {
    var view = container.Resolve<IAskUserNameView>();
    var model = container.Resolve<IAskUserNameModel>();
    var viewmodel = container.Resolve<IAskUserNameViewModel>(view, model);
    if (dlg.ShowDialog() ?? false)
        e.UserName = model.UserName;
}

Ma question est de savoir comment la communication horizontale travaille dans le pattern MVVM.
En quelque sorte, il semble erroné de laisser le contrôleur être impliqués dans le transfert de données entre les modèles.

J'ai regardé le médiateur modèle de laisser les modèles de communiquer directement. N'aime pas cette idée, car il rend le modèle en fonction de implemetations détails de l'interface graphique. (c'est à dire si la boîte de dialogue est remplacé par une zone de texte, le modèle doit changer)

Avez-vous eu un coup d'oeil à vous les questions suivantes?stackoverflow.com/questions/454868/... stackoverflow.com/questions/1667888/wpf-mvvm-dialog-example stackoverflow.com/questions/1792814/...
Oui j'ai regardé, mais ils ont tous recommandent un modèle de diffusion de résoudre quelque chose qui est en instance en instance.
'Le clic de bouton génère une commande dans le ViewModel.', qu'est-ce que cela signifie? "Le ViewModel déclenche un événement auquel le Contrôleur écoute", ce contrôleur?!

OriginalL'auteur adrianm | 2009-11-26