2009-05-23 14 views
6

No puedo entender cómo hacer que se notifique al modelo de vista de los cambios en el modelo sin agregar un montón de cosas específicas de UI como INotifyProperyChanged e INotifyCollectionChanged en mi modelo o crear toneladas de diferentes eventos y hacer un montón de cosas que se sienten como si fueran específicos de UI y deberían permanecer fuera del modelo.¿Cómo se mantiene la lógica de vista fuera del modelo y la lógica de negocios fuera del modelo de vista en MVVM?

De lo contrario, solo tendría que duplicar toda la lógica de negocios en el modelo de vista para asegurarse de que todo esté actualizado, y entonces ¿de qué sirve tener el modelo?

Una de las más complicadas que tengo en mi modelo es una propiedad de una clase de "Categoría". Puedes pensar que es una estructura de árbol y la propiedad es todos descendientes de nodo hoja. Bueno, en el modelo que la propiedad se genera sobre la marcha de forma recursiva a través de todos sus hijos, lo cual es muy bueno. Sin embargo, el modelo de vista necesita vincularse a esa propiedad y debe saber cuándo cambia. ¿Debo simplemente cambiar el modelo para acomodar el modelo de vista? Si lo hago, entonces el modelo de vista realmente no hace nada en este punto, el modelo genera todas las notificaciones necesarias de cambios y la vista solo puede vincularse directamente al modelo. Además, si el modelo era algo a lo que no tenía acceso, ¿cómo iba a solucionar esto?

Respuesta

8

No estoy de acuerdo en que INotifyPropertyChanged y INotifyCollectionChanged sean específicos de la IU. Están en espacios de nombres y ensamblajes que no están vinculados a ninguna pila de UI en particular. Por esa razón, típicamente pongo ese tipo de comportamiento tan bajo en el sistema como puedo (generalmente la capa de datos).

Si hay algún motivo por el que no desea ponerlo en ese nivel, está bien. Puede ponerlo en un nivel superior, como el servicio o la capa de IU. Sin embargo, debe asegurarse de que todos los cambios en las estructuras de datos también se realicen a través de esa capa.

+0

En realidad INotifyCollectionChanged es parte de System.Collections.Specialized que se encuentra en WindowsBase.dll. Siempre me ha parecido extraño. –

+0

Buen punto Cameron. Encuentro eso igualmente confuso. Actualizando mi respuesta en consecuencia ... –

+0

Hmm, supongo que la única vez que he oído hablar de ellos son los tutoriales de WPF para fines de enlace de datos, pero supongo que no hay nada intrínsecamente WPF sobre ellos aparte de los que se utilizan para WPF. – Davy8

Cuestiones relacionadas