FrameworkElement.DataContextChanged Evento
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Se produce cuando cambia el valor de la propiedad FrameworkElement.DataContext .
// Register
event_token DataContextChanged(TypedEventHandler<FrameworkElement, DataContextChangedEventArgs const&> const& handler) const;
// Revoke with event_token
void DataContextChanged(event_token const* cookie) const;
// Revoke with event_revoker
FrameworkElement::DataContextChanged_revoker DataContextChanged(auto_revoke_t, TypedEventHandler<FrameworkElement, DataContextChangedEventArgs const&> const& handler) const;
public event TypedEventHandler<FrameworkElement,DataContextChangedEventArgs> DataContextChanged;
function onDataContextChanged(eventArgs) { /* Your code */ }
frameworkElement.addEventListener("datacontextchanged", onDataContextChanged);
frameworkElement.removeEventListener("datacontextchanged", onDataContextChanged);
- or -
frameworkElement.ondatacontextchanged = onDataContextChanged;
Public Custom Event DataContextChanged As TypedEventHandler(Of FrameworkElement, DataContextChangedEventArgs)
<frameworkElement DataContextChanged="eventhandler"/>
Tipo de evento
Comentarios
La propiedad FrameworkElement.DataContext tiene un comportamiento integrado por el que su valor hereda todos los elementos secundarios FrameworkElement de un frameworkElement donde se establece un valor DataContext . Este comportamiento permite que un conjunto de elementos relacionados use el mismo contexto para enlazar a diferentes propiedades de origen, lo que resulta especialmente útil para plantillas de elementos, plantillas de datos y otros escenarios de enlace de datos. Dado que DataContext hereda, existe la posibilidad de que cada FrameworkElement use el valor heredado para desencadenar otro DataContextChanged
evento que se origine desde el elemento heredado, no del elemento primario, una vez que el elemento detecte que su valor DataContext heredado ha cambiado. Si no desea este comportamiento, debe controlar el DataContextChanged
evento en el origen primario, donde se activará primero el evento. Como parte de la lógica del controlador, establezca el valor de la propiedad Handled en los datos true
del evento DataContextChangedEventArgs en . Esa acción impedirá que el evento se enruta a elementos secundarios.
Nota
DataContextChanged
tiene un comportamiento de enrutamiento, pero no es un evento enrutado verdadero (no tiene un identificador RoutedEvent ). Además, se enruta de elementos primarios a secundarios, mientras que los eventos enrutados verdaderos se enrutan de elemento secundario a primario. Si está familiarizado con Windows Presentation Foundation (WPF), DataContextChanged
puede considerarse un evento enrutado de tunelización por las definiciones de enrutamiento de eventos de Windows Presentation Foundation (WPF).
DataContextChanged
es útil para escenarios en los que la lógica de control u otra lógica basada en código quiere notificar que el contexto de datos de los enlaces ha cambiado, lo que a menudo significa que los valores enlazados a datos cambiarán. Esto puede ser útil como desencadenador para ejecutar código que realiza cambios controlados por contexto y, a continuación, los enlaces existentes pueden usar el nuevo contexto para recalcular los valores. También es útil para los casos en los que no desea un enlace declarado previamente en plantillas de datos, pero necesita una notificación para los cambios. En este escenario, puedes controlar DataContextChanged
para detectar cambios en el contexto de datos y realizar cambios directos en otras propiedades del código en respuesta, al igual que un enlace declarado por XAML realiza dinámicamente a través del motor de enlace de datos. Por ejemplo, puede tener un control personalizado que se use principalmente dentro de plantillas de datos y desea que el control pueda realizar operaciones de enlace sin declaraciones explícitas Binding
en el XAML de la interfaz de usuario de la aplicación o en la plantilla de datos.