¿Qué es una propiedad de dependencia en .Net (especialmente en el contexto WPF)? ¿Cuál es la diferencia de la propiedad regular?
136
¿Qué es una propiedad de dependencia en .Net (especialmente en el contexto WPF)? ¿Cuál es la diferencia de la propiedad regular?
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 intenteGetValue()
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 :)
fuente
Grid.Row="1"
en unButton
establecerá que esté en la fila # 2 en el padreGrid
(debido al hecho de que las filas están basadas en cero) pero laRow
propiedad de dependencia pertenece alGrid
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 cuandoValue
cambie a 1. Podrá hacerlo usandoDataTrigger
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:
fuente