viewmodelbase stacklayout instancelocator ejemplo data content calculated bindingcontext c# .net wpf mvvm

c# - instancelocator - xamarin stacklayout content binding



El papel del modelo en MVVM (3)

He leído algunos artículos sobre el papel del Modelo (de Datos) en el patrón de MVVM. Sin embargo, todavía no podía entender lo que entra en el modelo.

¿Debería el modelo implementar INotifyPropertyChanged? Si es así, ¿cuál es la diferencia entre la VM y el modelo?

De lo contrario, un cambio en el Modelo no notificará a la VM y a la Vista que ocurrió. Entonces, considerando que la lógica entra en el Modelo, parece obvio que debería notificar al ViewModel sobre algunos de sus cambios. Sin embargo, ¿no es extraño implementar INotifyPropertyChanged en ambas clases?

¡Muchas gracias!


De uno de tus comentarios:

me parece extraño que el modelo implemente INotifyPropertyChanged, que me parece una clase relacionada con UI

Las notificaciones de cambio se usan en todo tipo de contextos, pero no en contextos de IU. Por ejemplo, es posible que desee adjuntar un código de diagnóstico que TextWriter cambios específicos en un TextWriter . Esto se logra fácilmente sin modificación al objeto modelo subyacente si el objeto implementa la notificación de cambio.

Pero incluso en una aplicación donde solo se usa para actualizar la interfaz de usuario, este patrón aún tiene sentido. Como la notificación de cambio se maneja a través de un evento, el objeto que genera el evento está desacoplado del objeto que lo maneja. Su modelo no sabe, y no necesita saber, qué tipo de UI lo está usando. Simplemente está diciendo: "Suponiendo que haya una IU, necesito decirle, sea lo que sea, que el valor de esta propiedad ha cambiado".

Entonces, ¿por qué hay un modelo de vista? ¿Por qué no solo enlazar directamente al modelo? De hecho, puede vincularse directamente con el modelo si implementa la notificación de cambio. En muchas aplicaciones simples de WPF, no es necesario que haya un modelo de vista separado: puede implementar notificaciones de cambio en el modelo y llamarlo por día. Es cuando necesita desacoplar la interfaz de usuario de la lógica empresarial subyacente y comienza a preocuparse por si está violando o no el principio de responsabilidad única de que surge la necesidad de un modelo de vista.


El modelo implementa su lógica comercial . El modelo de vista decora su lógica de negocios con el propósito de mostrarla e interactuar con ella, en una vista (UI de alguna forma, por ejemplo, web, winform, CLI). Por lo tanto, no, no diría que su modelo debe implementar INotifyPropertyChanged menos que lo haga como parte de su lógica empresarial principal.


En algunos casos, un Modelo debe implementar INotifyPropertyChanged. Imagine que está codificando un cliente para ICQ o algo así. ¿Cómo se supone que ViewModel debe saber que alguien te envió un mensaje?

Diferencia entre Model y ViewModel:

Un ViewModel solo simplifica la salida de un Modelo. Si el modelo es muy simple, un ViewModel no es necesario.