Поделиться через


FrameworkElement.DataContextChanged Событие

Определение

Происходит при изменении значения свойства 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"/>

Тип события

Комментарии

Свойство FrameworkElement.DataContext имеет встроенное поведение, при котором его значение наследует все дочерние элементы FrameworkElementэлемента FrameworkElement , где задано значение DataContext . Такое поведение позволяет набору связанных элементов использовать один и тот же контекст для привязки к разным свойствам источника, что особенно полезно для шаблонов элементов, шаблонов данных и других сценариев привязки данных. Так как DataContext наследуется, каждый элемент FrameworkElement , использующий наследуемое значение, может вызвать другое событие DataContextChanged, полученное из наследующего элемента, а не родительского элемента, после того как элемент обнаружит, что его наследуемое значение DataContext изменилось. Если такое поведение не требуется, следует обработать событие DataContextChanged в родительском источнике, где событие срабатывает первым. В рамках логики обработчика задайте для свойства Handled в данных события DataContextChangedEventArgs значение true. Это действие предотвратит маршрутизацию события в дочерние элементы.

Примечание

DataContextChanged имеет поведение маршрутизации, но не является истинно перенаправленным событием (у него нет идентификатора RoutedEvent ). Кроме того, он маршрутизирует от родительского к дочернему, тогда как истинные перенаправленные события направляются от дочернего к родительскому. Если вы знакомы с Windows Presentation Foundation (WPF), определения маршрутизации событий Windows Presentation Foundation (WPF) могут считать DataContextChanged перенаправленным событием туннелирования.

DataContextChanged полезен в сценариях, когда управляющая логика или другая логика на основе кода хочет уведомить об изменении контекста данных для привязок, что часто означает изменение значений привязки данных. Это может быть полезно в качестве триггера для выполнения кода, который вносит изменения на основе контекста, а затем новый контекст может использоваться существующими привязками для пересчета значений. Это также полезно в случаях, когда вам не требуется предварительно объявленная привязка в шаблонах данных, но требуется уведомление об изменениях. В этом сценарии можно обрабатывать DataContextChanged для обнаружения изменений в контексте данных и внесения прямых изменений в другие свойства в коде в ответ так же, как объявленная привязка XAML выполняет динамически с помощью подсистемы привязки данных. Например, у вас может быть пользовательский элемент управления, который в основном используется в шаблонах данных, и вы хотите, чтобы элемент управления мог выполнять операции привязки без каких-либо явных объявлений привязки в XAML пользовательского интерфейса приложения или в шаблоне данных.

Применяется к

См. также раздел