tengo bastante simple (espero :)) problema:WPF: cómo señalar un evento desde ViewModel a View sin código en codebehind?
En MVVM, Vista general escucha en cambios de las propiedades del ViewModel. Sin embargo, a veces me gustaría escuchar el evento para que, por ejemplo, View pueda iniciar la animación o cerrar la ventana cuando las señales de VM.
Hacerlo a través de la propiedad bool con NotifyPropertyChanged (y comenzar la animación solo cuando cambia de falso a verdadero) es posible, pero se siente como un truco, prefiero exponer el evento, ya que es semánticamente correcto.
Además, me gustaría hacerlo sin código en código subyacente, ya que al hacer viewModel.myEvent += handler
significaría que habría anulado el registro manualmente del evento para permitir que View sea GC'd - Las vistas de WPF ya son capaces de escucha las propiedades 'débilmente', y preferiría programar solo de manera declarativa en View.
La suscripción al evento fuerte estándar también es mala, porque necesito cambiar varios modelos de vista para una vista (porque la creación de la vista cada vez lleva demasiado tiempo de la CPU).
Gracias por las ideas (si hay una solución estándar, un enlace a msdn será suficiente)!
El cambio de propiedad es un evento. ¿Qué no es semánticamente correcto al escuchar una propiedad bool en un gatillo? – adrianm
Realmente no entiendo por qué las personas se oponen al código detrás de la vista. El motivo por el que las vistas responden a las propiedades se debe al código en el código subyacente, simplemente está oculto en el marco. –
adrianm: Intenté crear una propiedad bool en la máquina virtual que siempre es falsa y generar OnPropertyChanged en ella, pero View no reaccionó; parece que WPF solo hará algo cuando cambie el valor real. Así que tendría que activar y desactivar ese bool, MyProp = true; OnPropertyChanged ("MiProp"); MyProp = falso; OnPropertyChanged ("MiProp"); - en lugar de RaiseMyEvent(). ¿Ver? –