Estoy de acuerdo con las dos otras respuestas (las que por Kieren y Groky), pero siento que no mencionan una consideración muy importante en esta decisión.
Solo debe crear un modelo de vista si hay algo específico de la vista sobre lo que está haciendo. Si todo lo que hace es vincular datos e invocar comandos que pertenecen naturalmente a su modelo, no hay razón para crear un modelo de vista.
Por ejemplo, supongamos que:
- Su objeto Player tiene una propiedad Name, una propiedad Rango, un método Promover(), y un método de eliminación().
- Su vista es simple y le permite editar el nombre y el rango de cualquier jugador, y también tiene botones para promocionar y eliminar jugadores.
En este caso, no tiene sentido agregar un modelo de vista entre su vista y su modelo. Este punto de vista se puede unir directamente al modelo:
- Enlazar TextBox.Text a la propiedad Name
- Enlazar Slider.Value a la propiedad Rango
- Enlazar el botón Promover el método Promover()
- Enlace el botón Borrar para el método Delete()
Nota que en lugar de unir el botón Borrar para el método de eliminación() es posible que desee establecer su mando a ApplicationCommands.Delete y utilizar un CommandBinding para invocar el Método Delete()
Mi punto aquí es que, en la mayoría de los casos, si sus modelos están bien diseñados, no será necesario insertar un objeto de modelo de vista. Un modelo de vista solo es realmente necesario cuando se debe rastrear un estado específico de la vista (como "Reproductor actual"), las conversiones son demasiado complejas para ser manejadas por un enlace simple o necesita comandos que afectan a varios objetos de modelo y/o vista diferentes. propiedades del modelo al mismo tiempo.
En mi experiencia, si el modelo está diseñado correctamente, solo alrededor del 50% de todas las vistas realmente necesitan un modelo de vista, y en el caso de los elementos de una lista, es más como un 20%.
Un ejemplo de una época en la que puede usar un modelo de vista para un elemento en una lista es cuando necesita mantener una marca "seleccionada" separada que es parte de su vista pero no de su modelo, y la funcionalidad básica en ListBox no es suficiente.
+1 para "si funciona bien, entonces es correcto (incluso si infringe las directrices)" – andyp
No es broma. +1 de mí, también. –
Recibí un jajaja de "si funciona, es correcto", pero he visto muchas cosas que funcionan y están tan lejos de ser correctas que me dan ganas de tirar. :) – CindyH