2011-08-16 8 views
5

Silverlight/WPF DependencyProperty habilita el enlace de datos e indica cuándo la propiedad ha cambiado de valor, sin implementar INotifyPropertyChanged. Mi pregunta es cómo funciona esto en el nivel bajo: cómo DependencyProperty o DependencyObject realizan esta notificación de cambio cuando ni DependencyObject, DependencyProperty ni DispatcherObject definen ningún evento. ¿Esto tiene algo que ver con la propiedad DispatcherObject.Dispatcher?Comprender cómo funciona DependencyProperty y está implementado

Las propiedades de dependencia, o la clase DependencyObject, NO nativa apoyo INotifyPropertyChanged con fines de producción de notificaciones de cambios en el valor de la propiedad fuente DependencyObject para el enlace de datos operaciones.

Este excelente aclaración fue tomada palabra por palabra de:

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

http://msdn.microsoft.com/en-us/library/ms753358.aspx

Respuesta

1

Bueno, cuando se registra una propiedad de dependencia que proporcione una devolución de llamada a ser llamado cuando cambia el valor .

Here tiene más detalles. No creo que nada más sea público sobre las funciones internas de WPF. Podría estar equivocado.

4

Las propiedades de dependencia están estrechamente integradas con el sistema de unión internamente. Por lo tanto, en lugar de "notificar que la propiedad ha cambiado", el código que establece la propiedad de dependencia puede invocar directamente al sistema de enlace y decirle que se actualice.

De manera similar, las propiedades heredadas/adjuntas se pueden actualizar en cualquier elemento descendiente y/o el diseño/medida/organización se puede actualizar. Incluso puede indicar si se debe volver a evaluar cualquier activador (en Estilos o Plantillas de control).

El despachador no está realmente relacionado, pero puede usarse durante el proceso.

En resumen, está integrado en WPF/Silverlight.

+0

"Las propiedades de dependencia solo pueden ser usadas por los tipos DependencyObject" de los enlaces ref anteriores. DependencyObject se deriva de DispatcherObject. –

+0

@Webster - Sí, es cierto. ¿Tienes alguna pregunta sobre eso? – CodeNaked

Cuestiones relacionadas