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 プロパティには組み込みの動作があり、その値は、DataContext 値が設定されている FrameworkElement のすべての FrameworkElement 子要素に継承されます。 この動作により、関連する一連の要素が同じコンテキストを使用して異なるソース プロパティにバインドできるようになります。これは、項目テンプレート、データ テンプレート、およびその他のデータ バインディング シナリオに特に役立ちます。 DataContext は継承されるため、継承された値を使用する各 FrameworkElement では、継承された DataContext 値が変更されたことが要素によって検出されると、親要素ではなく継承要素からソースとなる別DataContextChangedのイベントが発生する可能性があります。 この動作が不要な場合は、最初にイベントが DataContextChanged 発生する親ソースで イベントを処理する必要があります。 ハンドラー ロジックの一部として、DataContextChangedEventArgs イベント データの Handled プロパティの値を にtrue設定します。 このアクションにより、イベントが子要素にルーティングされなくなります。

注意

DataContextChanged はルーティング動作を持ちますが、真のルーティング イベントではありません ( RoutedEvent 識別子がありません)。 また、親から子にルーティングされますが、実際のルーティング イベントは子から親にルーティングされます。 Windows Presentation Foundation (WPF) DataContextChanged に慣れている場合は、Windows Presentation Foundation (WPF) イベント ルーティング定義によってトンネリング ルーティング イベントと見なされる可能性があります。

DataContextChanged は、コントロール ロジックまたはその他のコード ベースのロジックが、バインドのデータ コンテキストが変更されたことを通知する必要があるシナリオに役立ちます。これは、多くの場合、データ バインド値が変更されることを意味します。 これは、コンテキスト駆動型の変更を行うコードを実行するトリガーとして役立ちます。その後、新しいコンテキストを既存のバインドで使用して値を再計算できます。 また、データ テンプレートで既存の宣言されたバインドが不要で、変更に関する通知が必要な場合にも役立ちます。 このシナリオでは、XAML で宣言されたバインドがデータ バインディング エンジンを介して動的に行うのと同様に、データ コンテキストへの変更を検出し、応答としてコード内の他のプロパティに直接変更を加えるために処理 DataContextChanged できます。 たとえば、主にデータ テンプレート内で使用するカスタム コントロールがあり、アプリ UI XAML またはデータ テンプレートで明示的な Binding 宣言を行わずに、コントロールでバインド操作を実行できるようにする場合があります。

適用対象

こちらもご覧ください