Pregunta

En mi aplicación tengo unawindow que importa sobre mefedmvvm el ViewModel:

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

Y ahora también tengo mi modelado ViewModel que se da cuenta del Modelo View:

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

En mi ViewModel tengo una propiedad iCommand para cerrar la ventana. El evento para el cierre de lata viene de cualquier lugar. Y con la ayuda del Cinch Framework 2.0, me doy cuenta de un SimpleCommand con Execute Methode.

Pregunta

¿Cómo puedo cerrar la ventana de mi Methode de ejecución? Durante la inyección de dependencia no tengo un constructor, no puedo registrar un evento o dar la vista como parámetro al Modelo View.

Editar

Sin embargo, una posibilidad que creo que no es buena:

Llame a esto en el methode

Application.Current.MainWindow.Close()
¿Fue útil?

Solución

Puedes lograr esto escribiendo un ICommand que pasa el Window instancia en como parámetro.

Un buen ejemplo está disponible aquí: ¿Cómo puedo asignar el comportamiento de 'Cerrar a escapar de la tecla de escape' a todas las ventanas WPF dentro de un proyecto?

En esa publicación el ICommand finalmente está vinculado a un KeyBinding (de modo que la tecla de escape se pueda usar para cerrar la ventana) pero podría unir el comando a cualquier botón o invocarlo desde cualquier lugar dentro de la vista. La parte importante es usar un RelativeSource En su parámetro de comando, vinculación de parámetro para hacer referencia al Window que quieres cerrar

Editar en respuesta a los comentarios

El comando es un singleton, pero no hay ningún requisito para que sea, es solo un singleton porque es apátrico y facilita la vinculación. Adquiere una referencia al Window a través de la vinculación, así que para un UserControl puedes usar:

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

Poder llamarlo desde el código del modelo de vista es un poco más complicado y necesita un enfoque diferente; Se puede encontrar un buen ejemplo aquí: http://gallery.expression.microsoft.com/windowcloseBehavior

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top