Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

629
Vistas
INotifyPropertyChanged frente a BindableObject frente a ObservableObject en Xamarin.Forms/MAUI

Me cuesta entender la diferencia entre esas 3 cosas cuando creo un proyecto usando Xamarin.Forms o MAUI. Sé cuáles son: INotifyPropertyChanged es una interfaz que debe implementar cuando desea usar enlaces en XAML, BindableObject es la clase Xamarin.Forms que implementa dicha interfaz y ObservableObject es una clase que se encuentra en Xamarin Community Toolkit que también implementa esa interfaz. Realmente no entiendo las diferencias entre ellos (especialmente los dos últimos) y ¿cuándo usarías alguno de ellos? He leído diferentes tutoriales y todos dicen cosas diferentes: que necesita implementar la interfaz usted mismo (para que su modelo de vista la implemente), que su modelo de vista debe heredar de BindableObject o, si está usando Xamarin Community Toolkit (que usted probablemente debería usar/está usando) - heredar de ObservableObject . Pero, como dije, ¿por qué debería usar alguna de las soluciones mencionadas anteriormente sobre las demás?

Si implementa la interfaz INotifyPropertyChanged , Visual Studio (o la extensión ReSharper, no estoy seguro de cuál) implementa automáticamente el método que necesita y agrega este código:

 public event PropertyChangedEventHandler PropertyChanged; protected virtual void PropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }

Pero hace que su código sea más largo/más feo, así que entiendo por qué querría heredar solo de una clase que ya implementa esa interfaz. Pero entonces, ¿por qué algunas personas dicen que siempre debes implementarlo tú mismo? ¿Hay alguna diferencia cuando lo implementa usted mismo o lo hereda de una clase que ya lo implementa? Además, si decide heredar de una clase, ¿por qué usar uno sobre el otro? La documentación de Xamarin.Forms es bastante buena en este sentido , pero no reconoce la existencia de Xamarin Community Toolkit y la documentación de Xamarin Community Toolkit no responde a mi pregunta y no dice por qué debería usar su ObservableObject sobre Xamarin. BindableObject incorporado de BindableObject .

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Hay cierta confusión, pienso en las diferentes clases:

  • Xamarin.Forms.BindableObject está diseñado para usarse para crear algo como una vista personalizada con propiedades enlazables. También implementa INotifyPropertyChanged, pero no creo que deba usarlo para ViewModel.

  • El ObservableObject del kit de herramientas de la comunidad se puede usar como una clase base para cualquier clase que desee usar con el enlace de datos, no es necesario que lo implemente usted mismo.

  • Si tiene algunos requisitos personalizados para manejar OnPropertyChanged, debe implementar la interfaz usted mismo, pero si solo desea tener un comportamiento predeterminado, ObservableObject está perfectamente bien.

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que su confusión se debe a la diferencia entre Bindable y Observable .

Tienes razón en su mayoría sobre INotifyPropertyChanged . Es el concepto abstracto de un cambio de valor, no la implementación concreta de ese cambio. Sin embargo, no solo se usa para XAML, se puede usar para cualquier cosa. Pero, ¿qué quiero decir con eso?

A las diferentes partes de un sistema les importará por qué se cambia un valor por diferentes razones. Una clase que se sienta y registra silenciosamente datos en un archivo de texto en función del valor de algo que cambia, es muy diferente a una clase que actualiza la interfaz de usuario de una aplicación cuando algo cambia.

INotifyPropertyChanged es simplemente un mecanismo para facilitar esa notificación de cambio, no es nada más.

Volviendo a la diferencia entre ObservableObject y BindableObject , son simplemente para diferentes casos de uso.

Eche un vistazo a la documentación a la que me vinculé arriba. ¿Ves cuántos métodos existen en la clase BindableObject? Observe cómo OnPropertyChanged es solo uno de los muchos métodos en el objeto, pero en ObservableObject es uno de solo dos .

BindableObject se utiliza como clase base para elementos . Cambiar el estado de un botón para deshabilitarlo cuando se hace clic en él, por ejemplo. O actualizar el valor de texto de una etiqueta en respuesta a algún cambio.

ObservableObject se puede usar como clase base para cualquier cosa que necesite notificar a otra clase sobre un cambio de valor. Como señaló correctamente, es para evitar que necesite escribir esa implementación estándar de INotifyPropertyChanged todo el tiempo.

Hay mucho más sobre este tema, pero no quiero bombardearlo con una gran cantidad de información.

Si está buscando algunos ejemplos del mundo real, estudie cómo el patrón de diseño de MVVM aprovecha el concepto de clases que comunican cambios entre sí.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda