Respuestas:
Las propiedades de dependencia son propiedades de 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 auxiliares en DependencyObject.
Lo mejor de ellos es que tienen toda la tubería para el enlace de datos incorporado. Si les une algo, se 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, las propiedades de dependencia difieren de las propiedades regulares en que no son solo establecedores / captadores para campos en la clase, sino que recuperan sus valores reales dinámicamente durante el tiempo de ejecución. El SetValue()
método de DP es bastante sencillo y establece el valor local de la propiedad en el valor que le dio. Sin embargo, cuando intente GetValue()
desde una DependencyProperty, primero buscará un valor local, si no hay ninguno presente (que es viable en DependencyProperties a diferencia de las propiedades regulares) continuará en el árbol lógico de la interfaz de usuario hasta que encuentre dicho valor. Si el marco ha alcanzado la parte superior del árbol sin encontrar ningún valor local, 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 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 desencadenantes en ellos, lo que en propiedades normales no está permitido.
Espero haber logrado aclarar algo de la vaguedad :)
Grid.Row="1"
en un Button
establecerá que esté en la fila # 2 en el padre Grid
(debido al hecho de que las filas están basadas en cero) pero la Row
propiedad de dependencia pertenece al Grid
objeto.
DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed
, ¿querías decir que tanto el enlace en XAML como el establecimiento de desencadenantes o simplemente establecer desencadenantes no está permitido? ¡Gracias por el seguimiento y por ayudar a aclarar las cosas!
Value
propiedad (No DP) con valor 0 y desea que su vista haga algo cuando Value
cambie a 1. Podrá hacerlo usando DataTrigger
y configurando elBinding={Binding Path=Value, Value=1}
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 objetivo 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 cambio, las propiedades de dependencia se registran con el marco de propiedad de dependencia, y el valor de propiedad subyacente se resuelve, lo que significa que el valor está determinado por el marco de propiedad de dependencia en base a las reglas definidas por el registro de propiedad.