Freigeben über


FrameworkElement.DataContextChanged Ereignis

Definition

Tritt auf, wenn sich der Wert der FrameworkElement.DataContext-Eigenschaft ändert.

// 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"/>

Ereignistyp

Hinweise

Die FrameworkElement.DataContext-Eigenschaft verfügt über ein integriertes Verhalten, bei dem ihr Wert an alle untergeordneten FrameworkElement-Elemente eines FrameworkElement erbt, bei dem ein DataContext-Wert festgelegt wird. Dieses Verhalten ermöglicht es einer Reihe verwandter Elemente, denselben Kontext zum Binden an verschiedene Quelleigenschaften zu verwenden, was besonders für Elementvorlagen, Datenvorlagen und andere Datenbindungsszenarien nützlich ist. Da DataContext erbt, besteht die Möglichkeit, dass jedes FrameworkElement , das den geerbten Wert verwendet, ein anderes DataContextChanged Ereignis auslöst, das aus dem erbenden Element und nicht vom übergeordneten Element stammt, sobald das Element erkennt, dass sich sein geerbter DataContext-Wert geändert hat. Wenn Sie dieses Verhalten nicht möchten, sollten Sie das Ereignis in der DataContextChanged übergeordneten Quelle behandeln, in der das Ereignis zuerst ausgelöst wird. Legen Sie im Rahmen ihrer Handlerlogik den Wert der Handled-Eigenschaft in den DataContextChangedEventArgs-Ereignisdaten auf fest true. Diese Aktion verhindert, dass das Ereignis an untergeordnete Elemente weitergeleitet wird.

Hinweis

DataContextChanged verfügt über Routingverhalten, ist aber kein echtes Routingereignis (es verfügt nicht über einen RoutedEvent-Bezeichner ). Außerdem wird vom übergeordneten zum untergeordneten Element weitergeleitet, während die wahren Routingereignisse von untergeordneten zu übergeordneten Ereignissen weitergeleitet werden. Wenn Sie mit Windows Presentation Foundation (WPF) vertraut sind, DataContextChanged kann von den Windows Presentation Foundation -Ereignisroutingdefinitionen (WPF) als Tunnelingroutenereignis betrachtet werden.

DataContextChanged ist nützlich für Szenarien, in denen steuerungslogik oder andere codebasierte Logik Benachrichtigungen darüber erhalten möchten, dass sich der Datenkontext für Bindungen geändert hat, was häufig bedeutet, dass sich datengebundene Werte ändern. Dies kann als Trigger nützlich sein, um Code auszuführen, der kontextgesteuerte Änderungen vornimmt, und dann kann der neue Kontext von vorhandenen Bindungen verwendet werden, um Werte neu zu berechnen. Dies ist auch nützlich für Fälle, in denen Sie keine bereits vorhandene deklarierte Bindung in Datenvorlagen möchten, aber eine Benachrichtigung für Änderungen benötigen. In diesem Szenario können DataContextChanged Sie Änderungen am Datenkontext erkennen und als Reaktion direkte Änderungen an anderen Eigenschaften im Code vornehmen, genau wie eine XAML-deklarierte Bindung dynamisch über die Datenbindungs-Engine. Beispielsweise verfügen Sie möglicherweise über ein benutzerdefiniertes Steuerelement, das hauptsächlich in Datenvorlagen verwendet werden kann, und Sie möchten, dass das Steuerelement Bindungsvorgänge ohne explizite Binding Deklarationen entweder in der XAML der App-Benutzeroberfläche oder in der Datenvorlage ausführen kann.

Gilt für:

Weitere Informationen