2010-09-09 12 views

Respuesta

7

La propiedad de dependencia es una propiedad (no en sí misma, sino que depende de otra, digamos una propiedad XAML Binding) que registra otra propiedad.

La propiedad de dependencia registra la otra propiedad de enlace en el código que está detrás al registrarla. Un ejemplo que se utiliza en mi proyecto es el siguiente:

public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(CustomImagePlaceHolder), new PropertyMetadata(null)); 

En el código anterior el ImageUri, es una propiedad de dependencia que registran la Fuente, que se define/declarada dentro generic.xaml (todo lo que no sea declarada segura , que se define o cualquier otra cosa) de la siguiente manera:

..HorizontalAlignment="Center" 
VerticalAlignment="Center" 
Height="{TemplateBinding Height}" 
Width="{TemplateBinding Width}" 
/> 

Así que aquí es muy importante que el valor vinculante plantilla en el XAML debe ser registrado como propiedad de dependencia en el código subyacente.

Así que cuando hemos definido en XAML que el origen de la imagen debe ser una plantilla enlazar con el origen, hemos registrado el mismo origen como una propiedad de dependencia.

Tenemos que decir qué tipo de propiedad de dependencia es esa, en el ejemplo anterior, la fuente es el tipo de BitmapImage, por lo que hemos definido typeof (BitmapImage).

Ahora el propietario/padre de esta propiedad de dependencia es customControlClass CustomImagePlaceHolder, y lo hemos definido de nuevo durante el registro.

Ahora para establecer el valor de la propiedad depndency, mediante el uso de las propiedades de la siguiente manera:

public BitmapImage Source 
     { 
      get 
      { 

    string strURI = (string)GetValue(CustomImagePlaceHolder.ImageUri); 
       return new BitmapImage(new Uri(strURI)); 
      } 
      set 
{ 
SetValue(CustomImagePlaceHolder.ImageUri, value); 
} 

     } 

Ahora bien, esta es la forma en que se vaya, fijamos el valor de nuestro código detrás o xaml a la propiedad de origen definido anteriormente y, a su vez, establece el valor de la propiedad de dependencia ImageUri, que a su vez establece el valor en el enlace de plantilla Fuente, ya que hemos registrado ImageUri como Fuente, que es presennt generic.xaml.

19

Ventajas de propiedades de dependencia

Como cuestión de hecho de una propiedad de dependencia tienen una gran cantidad de ventajas con respecto a las propiedades normales CLR.

  1. Propiedad Valor Herencia: Por Propiedad Valor herencia que quiere decir que el valor de una propiedad de dependencia puede suprimirse en la jerarquía de tal manera que el valor con mayor prioridad se establecerá en última instancia.
  2. Validación de datos: Podemos imponer la validación de datos para que se active automáticamente siempre que se modifique el valor de la propiedad.
  3. Participación en la animación: La propiedad de dependencia puede animar. La animación WPF tiene muchas capacidades para cambiar el valor en un intervalo. Al definir una propiedad de dependencia, finalmente puede admitir Animación para esa propiedad.
  4. Participación en Estilos: Los estilos son elementos que definen el control.Podemos usar la propiedad Style Setters on Dependency.
  5. Participación en plantillas: Las plantillas son elementos que definen la estructura general del elemento. Al definir la propiedad de Dependencia, podemos usarla en plantillas.
  6. DataBinding: Como cada una de las propiedades Dependency invoca a INotifyPropertyChanged cada vez que se modifica el valor de la propiedad, DataBinding es compatible internamente. Para leer más sobre INotifyPropertyChanged, por favor lea.
  7. CallBacks: Puede tener devoluciones de llamada a una propiedad de dependencia, de modo que cada vez que se cambia una propiedad, se produce una devolución de llamada.
  8. Recursos: Una propiedad de Dependencia puede tomar un Recurso. Entonces, en XAML, puede definir un Recurso para la definición de una propiedad de Dependencia.
  9. Modificaciones de metadatos: Puede definir cierto comportamiento de una propiedad de dependencia utilizando PropertyMetaData. Por lo tanto, anular una metadata de una propiedad derivada no requerirá redefinir o volver a implementar toda la definición de propiedad.
  10. Soporte de diseño: Una propiedad de dependencia obtiene soporte de Visual Studio Designer. Puede ver todas las propiedades de dependencia de un control enumerado en la Ventana de propiedades del Diseñador.

En estas, algunas de las características solo son compatibles con Dependency Property. Animation, Styles, Templates, Valor de la propiedad La herencia, etc., solo se pudo participar usando la propiedad de Dependencia. Si utiliza la propiedad CLR en su lugar en tales casos, el compilador generará un error.

por favor vaya a través de estos artículos,

http://www.codeproject.com/KB/WPF/BeginWPF4.aspx#diff

y http://www.dotnetfunda.com/articles/article961-wpf-tutorial--dependency-property-.aspx

y http://msdn.microsoft.com/en-us/library/cc221408(VS.95).aspx

+0

Muchas de esas "ventajas" son discutibles. Por ejemplo, una propiedad estándar puede ejecutar código para validar el valor que se le asigna. El resultado final es Propiedades de dependencia hacer dos cosas clave, admitir el enlace y permitir la animación. – AnthonyWJones

51

Las propiedades de dependencia y propiedades estándar son bastante diferentes.

Las características principales entregados por las propiedades de dependencia son el apoyo a unión y animación. Si desea asignar un valor a una propiedad usando un enlace Binding o una plantilla, esa propiedad debe ser una propiedad de dependencia. Al animar una propiedad, una propiedad de dependencia puede rastrear tanto el valor asignado actual como el valor animado actual.

Otra ventaja que a menudo se pasa por alto es que el almacenamiento solo es necesario para las propiedades que tienen valores asignados. Un control típico puede tener muchas propiedades, pero su código raro asigna un nuevo valor a todas las propiedades; de hecho, la mayoría de las propiedades se dejan en su valor predeterminado y solo unas pocas se configuran. Con las propiedades de dependencia, los valores predeterminados se almacenan como metadatos relacionados con la propiedad y no requieren ninguna memoria asignada por instancia de control si la propiedad permanece sin asignar.

Las propiedades de dependencia no están limitadas a los controles (cualquier cosa derivada de DependencyObject puede tener), sin embargo, está en controles o al menos FrameworkElements donde son más útiles.

+9

+1: Esto obtiene mi voto ya que * ¡en realidad responde la pregunta *! –

+2

Esto debería marcarse como respuesta :) –

0

Si escribe propdp y pulsa el carácter de tabulación en el editor de VS, a continuación, la documentación generada automáticamente de las propiedades de dependencia se establece como:

// El uso de un DependencyProperty como el almacén de respaldo para MyProperty.
Esto permite animación, estilo, encuadernación, etc ...

+0

@Sinatr Tienes razón, vítores – Ahmad

0

La diferencia principal entre un droperty dependencia y una propiedad CLR norma es que una propiedad de dependencia puede ser el blanco de una unión. Esto le permite vincular el valor de la propiedad a un valor proporcionado por otro objeto.

Sugeriría que si está haciendo una extensión de marcado o control personalizado, generalmente desea exponer cualquiera de sus propiedades públicas como propiedades de dependencia para que el consumidor de su control pueda manipular mejor la configuración en XAML (sin tener que hacerlo en código subyacente).

Si su propiedad será comúnmente la fuente de un enlace de datos (por ejemplo, proporcionar el texto para un bloque de texto), recomendaría usar una propiedad CLR estándar y hacer que la clase contenedora implemente INotifyPropertyChanged.

más ....

propiedad Una dependencia proporciona funcionalidad que amplía la funcionalidad de una propiedad en comparación con una propiedad que está respaldado por un campo. A menudo, cada una de esas funciones representa o respalda una característica específica del conjunto general de características de WPF.

Recursos

Enlace de datos

Estilos

Animaciones

metadatos anula

valor de la propiedad herencia

http://msdn2.microsoft.com/en-us/library/ms752914.aspx

Espero que esto ayude.

Cuestiones relacionadas