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 DataContextChanged-Ereignis für die übergeordnete Quelle behandeln, wobei das Ereignis zuerst ausgelöst wird. Legen Sie im Rahmen ihrer Handlerlogik den Wert der Handled-Eigenschaft in den DataContextChangedEventArgs-Ereignisdaten auf true fest. Diese Aktion verhindert, dass das Ereignis an untergeordnete Elemente weitergeleitet wird.

Hinweis

DataContextChanged weist routingverhalten auf, 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, kann DataContextChanged 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 Sie DataContextChanged verarbeiten, um Änderungen am Datenkontext zu erkennen und als Reaktion direkte Änderungen an anderen Eigenschaften im Code vorzunehmen, genau wie eine XAML-deklarierte Bindung dynamisch über die Datenbindungs-Engine. Beispielsweise können Sie über ein benutzerdefiniertes Steuerelement verfügen, das hauptsächlich für die Verwendung in Datenvorlagen vorgesehen ist, und Sie möchten, dass das Steuerelement Bindungsvorgänge ohne explizite Bindungsdeklarationen entweder im XAML der App-Benutzeroberfläche oder in der Datenvorlage ausführen kann.

Gilt für:

Weitere Informationen