programacion - viewmodel wpf
En MVVM, ¿cuál es la mejor manera para que ViewModel responda a las acciones del usuario en la Vista? (2)
Para los botones y otros desencadenantes utilizo la interfaz ICommand proporcionada por WPF de manera similar a DelegateCommand con la que se vinculó. (De hecho, uso un comando de retransmisión como se define here )
Cuando está cambiando un valor (moviendo un control deslizante, escribiendo en un cuadro de texto) use enlaces y maneje el comportamiento cuando se establece la propiedad en ViewModel.
En general, me parece que hay muy pocas razones para usar RoutedEvents en una aplicación MVVM, pero son una agradable y familiar capa de comodidad cuando no puede lograr lo que desea a través de los nuevos métodos específicos de WPF.
Entiendo que en MVVM:
- la vista sabe sobre ViewModel
- ViewModel sabe sobre el Modelo
- pero no funciona hacia arriba, por lo que el Modelo no sabe nada sobre ViewModel
- y ViewModel no sabe nada sobre la Vista
Entonces, ¿ cómo responde ViewModel a las acciones que el usuario realiza en la Vista , por ejemplo, escribe algo en un TextBox o mueve un control deslizante, etc.
Entiendo que esto se hace con RoutedEvents, pero casi todos los ejemplos de RoutedEvent que encuentro usan CodeBehind en la Vista, que es exactamente lo que ya no tienes en MVVM.
Así que eso deja RoutedCommands que encuentro más ejemplos en MVVM pero, por ejemplo, mover un control deslizante realmente no es un comando en ese sentido, es un evento, así que me pregunto si esto es realmente lo que debería usarse.
Luego leo consejos como " En MVVM use RoutedEvents lo menos posible , y sin RoutedCommands en absoluto ". OK.
Así que eso se va, por ejemplo, en el proyecto WPF Model-View-ViewModel Toolkit 0.1 forman el propio equipo de WPF usted tiene un " DelegateCommand " que también parece una forma interesante.
Entonces algunas personas también están usando " RelayCommand ".
Esta es una gran cantidad de opciones y confusión para hacer algo tan fundamental para el desarrollo de aplicaciones.
¿Cuál es la mejor manera de simplemente hacer en MVVM lo que estábamos haciendo durante los últimos 10 años con Code Behind :
- crear botón
- hacer doble clic en el botón
- escribir el código de manejo
Para ser claros, cuando las personas mencionan DelegateCommand y RelayCommand , realmente están hablando de lo mismo: una implementación de ICommand que le permite pasar a un delegado. Puedes usarlos de manera intercambiable.
En lo que a mí respecta, tener su vista (XAML) vinculada a DelegateCommands en ViewModel es la mejor manera de implementar MVVM.
Me mantengo alejado de RoutedEvents AND code-behind siempre que sea posible.