言語

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に設定します。 このアクションにより、イベントが子要素にルーティングされなくなります。

Note

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

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

適用対象

こちらもご覧ください