Pregunta

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

¿Fue útil?

Solución

Las propiedades de dependencia son propiedades de las clases que se derivan de DependencyObject, y son especiales en eso, 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 toda la tubería para el enlace de datos incorporada. Si les vinculas algo, lo notificarán cuando cambien.

Otros consejos

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 regulares en que no son solo creadores / captadores para los campos de la clase, sino que recuperan sus valores reales de forma dinámica durante el tiempo de ejecución. El método SetValue () de los DP es bastante sencillo y establece el valor local de la propiedad al valor que le dio. Sin embargo, cuando intenta GetValue () de una propiedad Dependency, primero buscará un valor local, si no está presente (lo que es viable en DependencyProperties a diferencia de las propiedades normales) continuará con la interfaz de usuario lógica. árbol hasta que encuentre tal valor. Si el marco ha llegado a la parte superior del árbol sin encontrar ningún valor local, entonces utilizará un valor predeterminado predefinido como el valor de la propiedad.

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

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

Espero haber logrado aclarar un poco la vaguedad :)

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

Un extracto:

  

Punto clave & # 8211; El valor de las propiedades de dependencia se resuelve

     

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

     

En cambio, las propiedades de dependencia se registran en el marco de la propiedad de dependencia y el valor de la propiedad subyacente se resuelve & # 8211; lo que significa que el valor está determinado por el marco de propiedad de dependencia basado en las reglas definidas por el registro de propiedad.

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

Si no te gustan las historias, guárdate (~ 5 minutos)

Tendremos que analizar algunos conceptos:

  • Resolución de valor hasta la herencia del valor del árbol / propiedad y
  • soporte de múltiples proveedores
  • Notificaciones de cambios

(a) Resolución de valor / Herencia de valor de propiedad

Usemos el ejemplo de los genes humanos para explicar el concepto.

Todos son más o menos iguales

Los seres humanos tienen mucha información asociada con ellos. Innumerables cientos y miles de datos están asociados con usted & # 8211;

  • cuántos dedos tienes,

  • cuántos dedos de los pies,

  • cuántos genes BRCA2 tienes, etc.

¿Cuál es el problema que queremos resolver?

Queremos poder dar respuestas directas a las personas que nos preguntan sobre nosotros mismos sin tener que cargar con toda esa información.

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 cargar alrededor de 10 volúmenes de páginas amarillas & # 8211; Básicamente, toda la biblioteca de Alexandria (en un formato impreso) en su bolsillo trasero para poder responder a todas esas preguntas: eso es demasiado para cargar.

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

Así que alguien tuvo una idea brillante. Notaron que la mayoría de las veces, la información es la misma. p.ej. La mayoría de la gente tiene:

  • un corazón

  • una cara, etc.

  • tres genes BRCA2

No hay necesidad de que cada persona lleve alrededor de 30 libras de papel en su bolsillo trasero. Puede almacenar toda esa información en un lugar , en una biblioteca central. Las personas tendrían la libertad de caminar sin tener que cargar con esa información.

Pero siempre hay excepciones ... no todas las personas tienen el mismo tipo de sangre o el mismo número de folículos pilosos en la cabeza. Si hay diferencias o excepciones a la norma, entonces usted simplemente llevaría esas excepciones con usted en su bolsillo trasero (es decir, en un diccionario), en lugar de un estante de libros de libros. Recuerde que, en su mayor parte, las personas son muy similares: comparten los mismos valores y esto rara vez cambia. Si no tiene las excepciones escritas en su bolsillo, entonces puede simplemente remitir al entrevistador a los datos almacenados en el repositorio común.

Ejemplo: el reportero entrevista al presidente Donald Trump **

Intentemos esto con un ejemplo.

Tenemos una instancia de Persona: Donald Trump. Un reportero de noticias le hace algunas preguntas a nuestro estimado Presidente:

  

& # 8220; Señor Presidente Trump, ¿cuántos genes HIF1A tiene? & # 8221;

El Don comprueba su bolsillo trasero. No hay nada en la lista sobre cuántos genes tiene. Así que simplemente le dice al reportero que tiene el número predeterminado que todos los demás tienen. " Igual que todos los demás, " dice Trump " Puede encontrar su respuesta en la biblioteca " ;. Así que el reportero simplemente va a la biblioteca para averiguar sobre ese detalle en particular.

  

& # 8220; Señor Presidente Trump, ¿cuántas caras tiene?

¿Puede este valor ser resuelto localmente? Parece que este valor se resuelve localmente porque en el bolsillo trasero de Trumps se encuentra la respuesta: 2, que se devuelve de inmediato al reportero.

Resolución de valor en un árbol

En realidad, las cosas son un poco más complicadas que una respuesta, ya sea estar en el bolsillo trasero o, de lo contrario, estar en una biblioteca central. Hay muchos lugares intermedios que podrían almacenar la misma información y, por lo tanto, serían candidatos ideales para "resolver el valor de la propiedad". Así que las cosas pueden comenzar en el bolsillo trasero, entonces el reportero podría tener que revisar un montón de lugares intermedios, en orden ascendente, para obtener la respuesta. p.ej. el reportero podría comenzar con otros periódicos, luego documentos de la corte y, en su defecto, si no se encuentra una respuesta, entonces la respuesta es el valor predeterminado contenido en la biblioteca central.

Para simplificarlo, las cosas se resuelven primero con la persona, y luego con las autoridades cada vez más altas: eventualmente terminará con Dios o con el monstruo de Spaghetti, según sea el caso. Al final, sigues subiendo y subiendo hasta que recibas una respuesta. Al final, todas las respuestas se resuelven.

Resumen

En resumen, una propiedad de dependencia es una propiedad que se resuelve localmente o en 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 interfaz de usuario tienen cientos y cientos de propiedades que pronto devorarían tu memoria si los almacenaras como campos de respaldo para todos y cada uno de ellos. Debido a que la mayoría de estos campos nunca cambian o raramente cambian, no es necesario almacenarlos como campos de respaldo, y sus valores pueden resolverse subiendo el árbol.

Por último, obtienes una notificación de cambio automática integrada de forma gratuita.

Por supuesto, la analogía es un poco tensa, pero espero que sea útil.

** Todavía esperando en el (fuego) muro prometido por Trump. Necesito mantener a los Spamicans fuera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top