Question

Dans ma demande j'ai un MainWindow que l'importation sur MEFedMVVM ViewModel:

xmlns:mefed="clr-namespace:MEFedMVVM.ViewModelLocator;assembly=MEFedMVVM.WPF"
mefed:ViewModelLocator.ViewModel="MainViewModel"

Et maintenant j'ai mon ViewModel aussi que réaliser le ViewModel:

[ExportViewModel("MainViewModel")]
public class MainViewModel: ViewModelBase

Dans mon ViewModel j'ai une propriété ICommand pour fermer la fenêtre. L'événement de fermeture peut vient de partout. Et avec l'aide du cadre Cinch 2.0 i réalise un Simplecommand avec Exécuter Methode.

Question

Comment puis-je fermer la fenêtre de mon exécution Methode? Au cours de l'injection de dépendance je n'ai pas un constructeur je ne peux pas enregistrer un événement ou donner le point de vue en tant que paramètre à la viewmodel.

Modifier

Cependant, une possibilité que je pense est pas agréable:

Appelez cela dans le Methode

Application.Current.MainWindow.Close()
Était-ce utile?

La solution

Vous pouvez y parvenir en écrivant un ICommand qui passe l'instance Window en tant que paramètre.

Un bon exemple est disponible ici: Comment puis-je attribuer le 'Fermer sur la presse Escape-clé' comportement à toutes les fenêtres WPF dans un projet?

Dans ce poste le ICommand est finalement lié à un KeyBinding (de sorte que la touche Escape peut être utilisé pour fermer la fenêtre), mais vous seriez en mesure de lier la commande à un bouton ou Invoke ne importe où dans la vue. L'important est d'utiliser un RelativeSource sur votre commande la liaison des paramètres pour référencer la Window que vous voulez fermer

Modifier en réponse aux commentaires

La commande est un singleton, mais il n'y a pas d'exigence pour qu'il soit - il est seulement un singleton parce qu'il est apatride et rend la liaison plus facile. Il acquiert une référence à la Window par liaison, donc pour un UserControl vous pouvez simplement utiliser:

<Button Command="{x:Static mynamespace:CloseWindowCommand.Instance}"
    CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" Content="Close My Parent Window" />

Pour pouvoir appeler de la vue code du modèle est un peu plus complexe et a besoin d'une approche différente; un bon exemple peut être trouvé ici: http://gallery.expression.microsoft.com/WindowCloseBehavior

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