¿Qué es una propiedad de dependencia?

Qué es una propiedad de dependencia en .Net (especialmente en el contexto de WPF). ¿Cuál es la diferencia de la propiedad regular?

Las propiedades de dependencia son propiedades de las clases que se derivan de DependencyObject, y son especiales porque en lugar de simplemente usar un campo de respaldo para almacenar su valor, usan algunos métodos de ayuda en DependencyObject.

Lo mejor de ellos es que tienen incorporadas todas las conexiones para el enlace de datos. Si les vincula algo, lo notificarán cuando cambien.

La única explicación que encontré útil y bien escrita es esta: http://www.wpftutorial.net/dependencyproperties.html

Básicamente, DependencyProperties difiere de las propiedades normales en que no son solo setters / getters para los campos en la clase, sino que recuperan sus valores reales dinámicamente durante el tiempo de ejecución. El método SetValue() de DP es bastante sencillo y establece el valor local de la propiedad al valor que le asignó. Sin embargo, cuando intente obtener GetValue() desde DependencyProperty, primero buscará un valor local, si no hay ninguno (lo que es viable en DependencyProperties a diferencia de las propiedades normales) continuará subiendo el árbol de la IU lógica hasta que encuentre dicho valor . Si el marco ha llegado a la parte superior del árbol sin encontrar ningún valor local, utilizará un valor predeterminado predefinido como valor de la propiedad.

Este método permite a DependencyProperties consumir menos memoria que las propiedades normales, ya que solo los valores establecidos explícitamente por el usuario se almacenarán localmente.

Y, como se mencionó anteriormente, DependencyProperties también nos permite vincularlos en el código XAML y establecer activadores en ellos, que en propiedades normales no está permitido.

Espero haber logrado aclarar algo de la vaguedad 🙂

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ proporciona una buena explicación de las propiedades de dependencia tanto en el contexto de WF como de WPF.

Un experto:

Punto clave: se resuelve el valor de las propiedades de dependencia

El objective final de una propiedad de dependencia, como cualquier propiedad, es administrar el estado. Pero a diferencia de las propiedades .Net normales, el valor de la propiedad local no se almacena en una variable de instancia.

En su lugar, las propiedades de dependencia se registran con el marco de propiedades de dependencia y se resuelve el valor de propiedad subyacente, es decir, el valor está determinado por el marco de propiedad de dependencia en función de las reglas definidas por el registro de propiedad.

Explicación sin código a través de Analogy (~ 5 min)

Piensa en esto, de esta manera:

Todos son más o menos lo mismo

Los seres humanos tienen mucha información asociada a ellos. Innumerables cientos y miles de datos están asociados con usted:

  • cuantos dedos tienes,

  • cuántos dedos de los pies,

  • cuántos genes BRCA2 tienes, etc.

¿Cuál es el problema que queremos resolver?

Queremos ser capaces de dar respuestas directas a las personas que nos preguntan sobre nosotros mismos.

  • Minimice la Huella de Memoria

Entonces la pregunta es: ¿cómo puedes recordar todo eso? Bueno, originalmente la gente comenzó a escribir todo esto, pero pronto se dieron cuenta de que tendrían que llevar alrededor de 10 volúmenes de páginas amarillas, básicamente toda la biblioteca de Alejandría (en formato de copia impresa) en su bolsillo trasero para poder Responda todas esas preguntas: eso es demasiado para cargar.

Solución: almacene información común en un solo lugar

Entonces alguien tuvo una idea shiny. Notaron que la mayoría de las veces, la información es la misma. Por ejemplo, la mayoría de las personas tiene:

  • un corazón

  • una cara, etc.

  • tres genes BRCA2

No es necesario que cada persona lleve alrededor de 30 libras de papel en el bolsillo trasero. Puede almacenar toda esa información en un solo lugar , en una biblioteca central. Las personas tendrían la libertad de caminar sin agobiarse cargando esa información.

Pero siempre hay excepciones … no todas las personas tienen el mismo tipo de sangre o la misma cantidad de folículos castackres en la cabeza. Si hay diferencias o excepciones a la norma, entonces simplemente llevaría esas excepciones con usted en su bolsillo trasero, en lugar de una libreta entera de libros por valor de libros. Recuerde, en su mayor parte, las personas son muy parecidas: comparten los mismos valores y esto rara vez cambia. Si no tiene excepciones escritas en su bolsillo trasero, puede simplemente referir al entrevistador a los datos almacenados en el repository común.

Ejemplo: el periodista entrevista al presidente Donald Trump **

Probemos esto con un ejemplo.

Tenemos un ejemplo de Persona: Donald Trump. Un reportero de noticias le hace algunas preguntas a nuestro estimado presidente:

“Señor presidente Trump, ¿cuántos genes HIF1A tiene?”

El Don revisa su bolsillo trasero. No hay nada en la lista acerca de cuántos genes tiene. Entonces, simplemente le dice al periodista que tiene el número predeterminado que todos los demás tienen. “Igual que todos los demás”, dice Trump. “Puedes encontrar tu respuesta en la biblioteca”. Entonces el reportero simplemente va a la biblioteca para averiguar sobre ese detalle en particular.

“Señor Presidente Trump, ¿cuántas caras tiene?

¿Se puede resolver este valor localmente? Parece que este valor se resuelve localmente porque en el bolsillo trasero de Trumps se encuentra la respuesta: 2 – que se devuelve rápidamente al periodista.

La resolución del valor en un árbol

Para simplificarlo, las cosas se resuelven primero con la persona, y luego hacia arriba, a la biblioteca, y si la información no está contenida allí, entonces la pregunta va a una autoridad superior: Dios o el monstruo de espagueti, según sea el caso. . En ese extremo, sigues yendo más y más alto hasta que obtengas una respuesta. Al final, todas las respuestas se resuelven.

Otra característica de las Propiedades de Dependencia: valores contingentes a otros valores

Esto significa que la respuesta que le da el Sr. Prez a un periodista que le hace una pregunta depende de lo que diga otra persona. Por ejemplo, si un periodista le pregunta al Sr. Prez si es un buen presidente, entonces la respuesta proporcionada podría depender totalmente de lo que dice su peluca sobre sí mismo.

“¡Créame!” dice la peluca, “Vamos a hacer, un gran presidente, que va a ganar de nuevo! Y vamos a ganar miles de millones de dólares”.

Si la peluca dice que el Trumpster está ganando, ¿a quién vamos a enfrentar de otra manera?

Resumen

En resumen, una propiedad de dependencia es una propiedad que se resuelve localmente o sube el árbol de la interfaz de usuario, según sea el caso. La razón por la que hacemos esto es porque los elementos de la IU tienen cientos y cientos de propiedades que pronto devorarían su memoria si los almacenara como campos de respaldo para cada uno de ellos. Debido a que la mayoría de estos campos nunca o muy raramente cambian, no es necesario almacenarlos como campos de respaldo, y sus valores se pueden resolver yendo por el árbol. Por supuesto, la analogía es un poco tensa, pero espero que sea útil (y lo más importante, memorable) para alguien.

** Todavía esperando en la pared (de fuego) que Trump prometió. Necesito mantener fuera a los Spamicans.