Las propiedades de dependencia se crean de la misma manera que las propiedades.Cuál es la diferencia entre Propiedad y Propiedad de Dependencia
¿Es una propiedad de dependencia utilizada solo al crear un control personalizado?
Las propiedades de dependencia se crean de la misma manera que las propiedades.Cuál es la diferencia entre Propiedad y Propiedad de Dependencia
¿Es una propiedad de dependencia utilizada solo al crear un control personalizado?
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.
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.
INotifyPropertyChanged
cada vez que se modifica el valor de la propiedad, DataBinding
es compatible internamente. Para leer más sobre INotifyPropertyChanged
, por favor lea.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
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.
+1: Esto obtiene mi voto ya que * ¡en realidad responde la pregunta *! –
Esto debería marcarse como respuesta :) –
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 ...
@Sinatr Tienes razón, vítores – Ahmad
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.
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