MVVM no permite código detrás y así manejar eventos. Entonces, ¿cuál es la forma de MVVM para que se le notifique que se ha cambiado una celda?¿Cómo manejar el evento Wpf DataGrid CellEditEnding en MVVM?
Respuesta
Es una pregunta muy legítima y obvia, ya que hay soluciones muy legítimas para el problema de MVVM. Supongo que alguien lo marcó porque probablemente se lo han pedido innumerables veces.
Sé que hay algo incorporado para hacer esto en .Net4. Estoy atrapado en .Net3.5 así que utilizo la clase CommandReference del kit de herramientas WPF, para convertir un evento en la vista en un comando en un modelo de vista.
La solución al problema para MVVM es manejar el evento, creo. :) –
¡Pero 'cómo' es la pregunta !! No puede agregar controladores de eventos sin romper MVVM. La referencia de comando le permite convertir un evento en la interfaz de usuario a un comando en la máquina virtual. – NVM
¿Necesita controlar el evento CellEditEnding? ¿Sería una posibilidad ejecutar el código en el setter de la propiedad que está vinculada a la celda?
"MVVM no permite el código detrás y así el manejo de eventos."
¡Vaya! Ahí está el problema.
MVVM desalienta el código que hay detrás, es cierto, pero solo cuando algo se puede hacer razonablemente a través de Xaml. "No codificarás detrás" nunca ha sido dicho por alguien con una pista.
A veces, el manejo de un evento es la forma más simple y mejor para lograr su objetivo. Cuando esa sea la situación, acéptala, resuelve tu problema y sigue adelante. A veces ni siquiera es posible lograr tu objetivo en XAML. En esos casos, arroje la lógica de vista en el código subyacente de la vista y continúe.
Es mucho más importante mantener los objetivos arquitectónicos de MVVM (separación de preocupaciones entre capas) que cumplir estrictamente las reglas generales (como evitar el código subyacente). Si esa distinción no se realiza , te estás perdiendo el bosque por los árboles.
Bueno, tienes razón y estás equivocado. Si está agregando algún código detrás simplemente por hacer algo puramente de interfaz de usuario, está bien. Pero supongamos que si el evento final de edición de celda va a actualizar algo en su modelo (a través de su máquina virtual), entonces es una muy mala idea (IMO). – NVM
Depende de qué tan adecuado sea su modelo para trabajar en un DataGrid. En una situación, tengo @work ahora, por ejemplo, me veo obligado a usar una cuadrícula de datos de una sola fila para representar un solo elemento.La VM no va a exponer una colección de estos elementos que solo pueden contener una sola instancia, sería una ridícula concesión en el lado de la VM por un extraño requerimiento en el V. Más bien, la V es responsable de la transformación lo que la VM expone como una aplicación real necesita lo que requiere. –
No estoy seguro de entender cuál es su situación. Pero no estoy de acuerdo con la afirmación de que "la vista es responsable de transformar lo que la VM expone". The View es responsable de "mostrar" lo que expone la VM. La VM es responsable de transformar el modelo. Una vista solo debe solicitar a la máquina virtual que transforme las cosas en el modelo en función de la solicitud de los usuarios. La vista no tiene nada que ver con la transformación de nada en el modelo, es completamente responsabilidad de VM. Y la VM existe precisamente porque los modelos no se adaptan directamente a las vistas de trabajo (como datagridview). – NVM
Como nunca hubo una respuesta marcada para esta pregunta; lo que quiere es una implementación de "evento para mandar". Básicamente, captura un evento de su elección y llama a una implementación ICommand
en su ViewModel.
Ya ha respondido here en resumen (compruebe la respuesta de Derek Beattie).
- 1. WPF datagrid con MVVM
- 2. Columnas dinámicas WPF MvvM DataGrid
- 3. Implementación CollectionViewSource MVVM para WPF DataGrid
- 4. Cómo manejar el evento SelectionChanged de ComboBox con MVVM en wpf?
- 5. Evento para Seleccionar todo: WPF Datagrid
- 6. WPF Toolkit DataGrid tamaño de columna evento
- 7. WPF Datagrid Fila Edición evento "ENDED"
- 8. WPF DataGrid CellEditEnding - DataSet no está actualizando Till Row Lost Focus
- 9. WPF DataGrid: Enlace DataGridColumn visibilidad a ContextMenu MenuItems IsChecked (MVVM)
- 10. Agregar, actualizar y eliminar WPF DataGrid usando MVVM
- 11. Manejar un Evento de Salida de WPF
- 12. Estilo WPF DataGrid-Silverlight DataGrid?
- 13. Cómo manejar el subproceso de C# WPF en el modelo de vista de MVVM
- 14. Cómo implementar DataGridComboBoxColumn editable en WPF DataGrid
- 15. C# MVVM DataGrid vinculante estrategias?
- 16. cómo manejar el subtotal del grupo y p. ¿Filas de destino en WPF DataGrid?
- 17. WPF Datagrid: evento SelectionChanged no se produce cuando SelectionUnit = "Celda"
- 18. Emular el evento de doble clic en Datagrid con touchDown
- 19. cómo cargar wpf usercontrol en el patrón MVVM
- 20. WPF DataGrid AutoColumn través ICustomTypeDescriptor
- 21. WPF DataGrid cómo obtener cuando ItemsSource actualiza
- 22. ArgumentOutOfRangeException en DataGridCellsPanel.BringIndexIntoView al presionar Entrar en un WPF Datagrid?
- 23. WPF datagrid ¿permite al usuario agregar filas?
- 24. WPF DataGrid RowHeader databinding
- 25. WPF MVVM y Pruebas unitarias
- 26. Resaltar celdas en WPF DataGrid cuando el valor enlazado cambia
- 27. WPF DataGrid: ¿Reordenar filas?
- 28. WPF ToolKit DataGrid Performance
- 29. StringFormat personalizado en WPF DataGrid
- 30. Wpf DataGrid problema
Me parece una pregunta legítima, pero tal vez deba ser un poco más prolijo con su pregunta: ¿qué es exactamente lo que no entiende sobre el manejo de ese evento? ¿Desea saber si debe hacerse en la vista o en el modelo de vista? * (Aquí hay una pista: el ViewModel no debe saber nada sobre DataGrid). * – slugster
@slugster - Obviamente no puedo usar este evento ya que MVVM no permite Code Behind. Entonces mi pregunta es ¿qué puedo hacer en lugar de usar este evento? – Erez
MVVM no * prohíbe * código detrás, simplemente * lo desalienta * y le da un patrón para lograr ese ideal. ¿Qué es exactamente lo que necesita hacer una vez que se cambie esa celda de cuadrícula de datos (su respuesta podría dictar el enfoque a seguir)? – slugster