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

適用対象

こちらもご覧ください