Pregunta

Estoy utilizando MVVM pero creo que es bastante sencillo y no es realmente un marco específico. Mi configuración es la siguiente:

  • StartViewModel - tiene un comando exit que devuelve un RelayCommand / ICommand

    public ICommand ExitCommand {
        get { return _exitCommand ?? (_exitCommand = new RelayCommand(() => MessageBox.Show("Hello World"))); }
    }
    public RelayCommand _exitCommand;
    
  • StartView (User Control) tiene un botón binded al comando exit

    <Button Content="Exit" Command="{Binding ExitCommand}" />  
    
¿Fue útil?

Solución

En primer lugar, leer lo más que puede estómago en MVVM, por ejemplo, WPF Aplicaciones Con El Modelo-Vista-ViewModel Diseño patrón en MSDN. Una vez que entienda los principios básicos de conducción que la respuesta se parece más razonable.

Básicamente desea mantener su punto de vista (UI) y ViewModel (IU esencialmente abstracta, sino también Extracto) capas y desacoplado separada. Mostrando un cuadro de mensaje o el cierre de una ventana se debe considerar un detalle de interfaz de usuario específico y, por tanto, implementado en la vista, o en el caso de un cuadro de mensaje, más generalmente disponibles a través de un 'servicio'.

Con respecto al modelo de vista, esto se consigue usando Inversión de Control (COI). Tomemos el ejemplo de cuadro de mensaje anterior. En lugar de mostrar el cuadro de mensaje en sí, se necesita una dependencia de una IMessageBoxService que tiene un método Show y el modelo de vista llama que en lugar - la responsabilidad delegando. Esto podría ser tomado aún más por recipientes de apalancamiento inyección de dependencias (DI).

Otro enfoque utilizado para cerrar una ventana que podría ser para el modelo de vista para exponer un evento, denominado por ejemplo RequestClose (como en el artículo de MSDN), que la vista se haya suscrito. A continuación, el modelo de vista podría provocar el evento cuando se quiere que el correspondiente Vista / ventana para cerrar; asume otra cosa es escuchar y asumir la responsabilidad y lo ponga en práctica.

Otros consejos

Puede implementar un CloseEvent en su StartViewModel. en su StartView usted tiene que registrar este CloseEvent. si aumenta el CloseEvent de su máquina virtual a continuación, la vista reconocer que tiene que cerrar la aplicación / ventana.

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