Herencia en Dependency Properties

El temita jodido del otro día, cuando estuve dándole caña a las propiedades de dependencia heredables (FrameworkPropertyMetadata.Inherits)

Yo tenía una magggnífica propiedad llamada Relleno compuesta de:

  • Color (Color)
  • Id de patrón (int)
  • Tint (double)

Esta propiedad se hereda por por lo que los elementos del árbol visual. Hasta ahí, bien.

El asunto se puso marrón oscuro cuando en un hijo me daba por modificar el miembro “Color”. ¿Qué ocurría?

Resultado esperado:

image

Resultado obtenido:

image

La razón es que el Relleno es una instancia compartida entre todos los elementos de la jerarquía. El del padre es la misma instancia que el del hijo, por lo que si modificamos el Color al Relleno, efectivamente, ¡estamos cambiando la misma cosa!

¿Qué hemos de hacer? Pues la cosa quizá no es muy sencilla, pero lo primero de todo es que tenemos que tener claro qué es un Value-Object, es decir, cuándo el valor de una cosa determina qué cosa es.

Esto depende de la semántica que queramos darle. Para mí, si tengo una instancia de Relleno y le cambio el Color, serán dos patrones distintos, por lo que no sería admisible cambiar el Color, sino que debería otra crearme otra instancia de Relleno distinta (Relleno debería ser inmutable). De estas manera, 2 instancias distintas nos darían el resultado deseado.

Espero que la monserga te haya servido, pequeño saltamontes.

Hala, a echarte un Call Of Duty, que ya es escrito bastante, mamoncete.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s