2010-04-02 22 views
7

¿Alguien puede explicarme qué es una propiedad de dependencia en WPF y para qué sirve? Sé que hay muchos tutoriales en google para él, pero enseñan cómo crear una propiedad de dependencia. Estoy confundido en cuanto a dónde lo usaría. Quiero decir, ¿lo usaré en XAML? Si alguien pudiera explicarme en términos simples, sería genial.Propiedades de dependencia

Sería bueno si se muestra un ejemplo simple junto con XAML, por ejemplo, de cómo podría usar la propiedad, y cuál sería el efecto después de que lo use. Muchas gracias por todas sus respuestas.

+0

Duplicado parcial: http://stackoverflow.com/questions/2505234/need-a-short-and-clear-definition-for-dependency-properties – itowlson

Respuesta

13

Los muchos enlaces listados deben darle una buena idea de lo que las propiedades de dependencia son, pero en general, la forma más fácil pensar en ellos creo que es la siguiente:

Las propiedades de dependencia son lo que usted necesita utilizar para propiedades de los elementos de la interfaz de usuario, si desea poder enlazarlos utilizando el enlace de datos de WPF. Para ser el "Objetivo" de una operación de enlace de datos, deberá convertir la propiedad en Propiedad de Dependencia.

Cuando implemente una clase estándar (que se convierte en el DataContext de un "control"), querrá usar INotifyPropertyChanged en lugar de DPs. Esto permite que esa clase sea una "Fuente" vinculante.

En general, solo querrá hacer Propiedades de dependencia si está haciendo algo que estará vinculado en XAML, como el Target de un elemento de UIelement. Por ejemplo, digamos que tenemos XAML como esto:

<local:MyControl ControlProperty="{Binding SomeProperty}" /> 

Normalmente, ControlProperty habrá una Dep. Propiedad, ya que es el destino vinculante, y SomeProperty será una propiedad CLR estándar (no un DP), en una clase que implemente INotifyPropertyChanged.

+0

Entonces, ¿será algo así como, cuando el apellido cambie de test1 a test2, cambie la fuente de verde a amarillo? Solo un ejemplo ... – developer

+0

Bueno, incluso con solo mostrar el apellido. Tome el control "TextBlock" - la propiedad "Text" es una propiedad de dependencia, por lo que puede hacerlo:

+0

@developer: LastName puede ser una propiedad normal en una clase, pero el texto debe ser una DependencyProperty para ser el "destino" vinculante, es decir, lo que está vinculando en XAML. –

0

el mejor uso que he visto es para unir propiedades a clases que no puede modificar. Entonces, si obtiene una asamblea de terceros, puede adjuntar información adicional a las clases y leerlas cuando lo necesite.

+0

Es propiedades adjuntas, que es solo una forma de propiedad de dependencia, y a menudo se piensa como separado. –

1

Este es probablemente el artículo que describe AD más sencillas:

http://joshsmithonwpf.wordpress.com/2007/06/22/overview-of-dependency-properties-in-wpf/

En lo personal, yo los utilizo más a menudo cuando necesito para mostrar las propiedades para que puedan ser enlazado a datos a través de XAML. Por ejemplo, si hago un UserControl que quiero usar en XAML, y quiero establecer una propiedad en el UserControl a través de XAML, lo expongo como una propiedad de dependencia.

1

Lo que estás buscando es chapter 3 de WPF Unleashed. Es un capítulo de muestra gratis.

3

Una Propiedad de Dependencia no almacena su valor en un campo, sino en alguna tabla hash. Por lo tanto, necesita menos memoria, lo que es especialmente importante para los objetos de GUI, ya que la mayoría de las propiedades conservarán sus valores predeterminados y, por lo tanto, no ocuparán más memoria. Las propiedades de dependencia son un poco más lentas, debido al boxeo de un lado a otro y al buscar en la tabla hash.

marco Objeto La dependencia permite, además de una gran cantidad de características como las notificaciones de cambio etc. He encontrado un buen recurso que explica el funcionamiento interno aquí: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c33a8359-58be-430d-b949-cb6e6f32d8aa

Acepto la sintaxis para declarar que es un poco feo, pero puedes crear ayudantes para aliviar eso un poco.

Cuestiones relacionadas