c# - relacion - Cuál es la diferencia entre Propiedad y Propiedad de Dependencia
relacion entre derecho de autor y propiedad industrial (5)
La principal diferencia entre una propiedad de dropeo de dependencia y una propiedad clr estándar es que una propiedad de dependencia puede ser el destino de un enlace. Esto le permite vincular el valor de la propiedad a un valor proporcionado por otro objeto.
Sugeriría que si está haciendo un control personalizado o una extensión de marcado, generalmente quiere exponer cualquiera de sus propiedades públicas como propiedades de dependencia para que el consumidor de su control pueda manipular mejor las configuraciones en XAML (sin tener que hacerlo en el código). -detrás).
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.
Promover....
Una propiedad de dependencia proporciona una funcionalidad que amplía la funcionalidad de una propiedad en lugar de una propiedad respaldada 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
El enlace de datos
Estilos
Animaciones
Anulaciones de metadatos
Herencia de valor de propiedad
http://msdn2.microsoft.com/en-us/library/ms752914.aspx
Espero que esto ayude.
Las propiedades de dependencia se crean de la misma manera que las propiedades.
¿Se usa una propiedad de dependencia 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 registrándola. 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, ImageUri, es una propiedad de dependencia que registra el origen, que se define / declara dentro de generic.xaml (lo que no esté seguro de si está declarado, definido 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 de enlace de la plantilla en el XAML se debe registrar como propiedad de dependencia en el código subyacente.
Entonces, cuando hemos definido en XAML que el origen de la imagen debe ser un enlace de plantilla 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, el Origen 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 de dependencia, utilizando nuestras 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, así es como lo hacemos, establecemos el valor de nuestro código detrás o xaml en la propiedad de origen definida anteriormente y, a su vez, establece el valor de la propiedad de dependencia ImageUri, que a su vez establece el valor en la fuente vinculante de la plantilla, ya que se registró ImageUri como Fuente, que es presennt generic.xaml.
Las propiedades de dependencia y las propiedades estándar son bastante diferentes.
Las funciones clave entregadas por las propiedades de dependencia son compatibles con el enlace y la animación . Si desea asignar un valor a una propiedad usando un Binding
o enlace de 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 (todo lo que se deriva de DependencyObject
puede tener), sin embargo, está en los controles o al menos FrameworkElements
donde son más útiles.
Si escribe propdp y pulsa el carácter de tabulación en el editor VS, la documentación generada automáticamente de Propiedades de dependencia se establece como:
// Uso de DependencyProperty como almacén de respaldo para MyProperty.
Esto permite animación, diseño, encuadernación, etc.
Ventajas de la Propiedad de Dependencia
Como cuestión de hecho, una Propiedad de Dependencia tiene muchas ventajas sobre las propiedades de CLR normales.
- Herencia de valor de propiedad: por herencia de valor de propiedad nos referimos a que el valor de una propiedad de dependencia puede ser anulado en la jerarquía de tal manera que el valor con mayor precedencia se establecerá en última instancia.
- 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.
- Participación en la animación: la propiedad de dependencia puede animarse. 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.
- Participación en estilos: los estilos son elementos que definen el control. Podemos usar la propiedad Style Setters on Dependency.
- 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.
- DataBinding: Como cada propiedad de Dependen invoca
INotifyPropertyChanged
cada vez que se modifica el valor de la propiedad,DataBinding
es compatible internamente. Para leer más acerca deINotifyPropertyChanged
, por favor lea. - CallBacks: puede tener devoluciones de llamada a una propiedad de dependencia, de modo que cada vez que se cambia una propiedad, se genera una devolución de llamada.
- 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.
- Anulaciones 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.
- Compatibilidad con diseñadores: 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 propiedad, herencia, etc. solo podrían participar usando la propiedad de Dependencia. Si utiliza la propiedad CLR en su lugar en tales casos, el compilador generará un error.
por favor revisa 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