Question

J'utilise MVVM Fondation mais je pense que son avance droit tout à fait et pas vraiment spécifique cadre. Ma configuration est la suivante:

  • StartViewModel - a une commande exit qui retourne une RelayCommand / ICommand

    public ICommand ExitCommand {
        get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
    }
    public RelayCommand _exitCommand;
    
  • StartView (contrôle de l'utilisateur) dispose d'un bouton binded à la commande exit

    <Button Content="Exit" Command="{Binding ExitCommand}" />  
    
Était-ce utile?

La solution

Tout d'abord, lire autant que vous pouvez l'estomac sur MVVM, par exemple WPF Apps avec le Model-View-ViewModel Design Motif sur MSDN. Une fois que vous comprenez les principes de base de conduite il la réponse semblera plus raisonnable.

Fondamentalement, vous voulez garder vos calques View (UI) et ViewModel (UI essentiellement abstraite, mais aussi abstraite Model) séparée et découplées. Afficher une boîte de message ou la fermeture d'une fenêtre doit être considérée comme un détail spécifique de l'interface utilisateur et donc mis en œuvre dans la vue, ou dans le cas d'une boîte de message, plus généralement disponible via un « service ».

En ce qui concerne le ViewModel, ceci est réalisé en utilisant Inversion de commande (COI). Prenons l'exemple de boîte de message ci-dessus. Plutôt que de montrer la boîte de message lui-même, il faut une dépendance à l'égard d'un IMessageBoxService qui a une méthode Show et le ViewModel appelle qu'au lieu - déléguer la responsabilité. Cela pourrait être prise plus en tirant parti Dépendance conteneurs d'injection (DI).

Une autre approche utilisée pour fermer une fenêtre de vue pourrait être le ViewModel pour exposer un événement, appelé par exemple RequestClose (comme dans l'article MSDN), que la vue est abonnée à. Alors le ViewModel augmenterait l'événement quand il veut la vue / fenêtre pour fermer correspondante; il suppose quelque chose d'autre écoute et prendra en charge et en fait le faire.

Autres conseils

vous pouvez mettre en œuvre un CloseEvent dans votre StartViewModel. dans votre StartView vous devez vous enregistrer ce CloseEvent. lorsque vous élevez votre CloseEvent de votre VM puis, votre vue reconnaître qu'il doit fermer votre application / fenêtre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top