言語

DependencyPropertyChangedEventArgs クラス

定義

依存関係プロパティがその値を変更したときに呼び出 される PropertyChangedCallback 実装のデータを提供します。 また、 Control.IsEnabledChanged イベントおよび DependencyPropertyChangedEventHandler デリゲートを使用するその他のイベントのイベント データも提供します。

public ref class DependencyPropertyChangedEventArgs sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class DependencyPropertyChangedEventArgs final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class DependencyPropertyChangedEventArgs
Public NotInheritable Class DependencyPropertyChangedEventArgs
継承
Object Platform::Object IInspectable DependencyPropertyChangedEventArgs
属性

この例では、DependencyPropertyChangedEventArgs イベント データを使用する PropertyChangedCallback 実装を示します。 具体的には、 NewValue を使用して関連プロパティを設定し、基になる数値 DependencyProperty 値を テキストとして複合コントロールの TextBlock 部分に表示します。

private static void ValueChangedCallback(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
    NumericUpDown ctl = (NumericUpDown)obj;
    Int32 newValue = (Int32)args.NewValue;

    // Update the TextElement to the new value.
    if (ctl.TextElement != null)
    {
        ctl.TextElement.Text = newValue.ToString();
    }

注釈

DependencyPropertyChangedEventArgs は、依存関係プロパティ値の変更を伴う 2 つの異なる状況のデータを提供します。

  • カスタム依存関係プロパティの PropertyChangedCallback によって使用される状況コールバック情報。 これはより一般的なケースです。
  • DependencyPropertyChangedEventHandler に基づくイベントのイベント データ。 このデリゲートを使用する唯一のWindows ランタイム イベントは Control.IsEnabledChanged イベントであるため、これはあまり一般的ではありません。 この場合の DependencyPropertyChangedEventArgs イベント データの使用方法の詳細については、「 DependencyPropertyChangedEventHandler または Control.IsEnabledChanged」を参照してください。

PropertyChangedCallback 実装は、依存関係プロパティを登録するときに指定するプロパティ メタデータの省略可能な部分です。 コールバックは、依存関係プロパティ システムによって内部的に呼び出されます。 一般的な依存関係プロパティの詳細については、「 カスタム依存関係プロパティと依存関係プロパティ概要」を参照してください。

通常は、プライベートまたは内部アクセスを使用してメソッドを定義します。 メソッドは静的である必要があります。 メソッドは静的であるため、PropertyChangedCallback デリゲートの DependencyObject パラメーター (d) が重要です。 これは、プロパティが変更されている特定の依存関係オブジェクト インスタンスを識別するものです。 値の修正や強制、同じオブジェクトに対する応答で計算される別のプロパティ値の変更など、多くの操作では、この DependencyObjectを参照します。 通常は、変更するプロパティの所有者の型にキャストします。 所有者の型は、 DependencyProperty.Register 呼び出しで名前によって参照される型です。 PropertyChangedCallback がプロパティ メタデータに割り当てられているメタデータは、同じ呼び出しの一部です。

再帰の可能性に注意してください。 PropertyChangedCallback が呼び出される依存関係プロパティの値を変更すると、再び呼び出されます。 たとえば、コールバックが常に値を 2 で除算した Double プロパティのコールバックを作成した場合、そのコールバックは再帰的に呼び出され、アプリは無限ループになります。

2 つ以上の異なる依存関係プロパティでコールバックを定義して相互に変更することは有効ですが、値の安定を可能にしない意図しない循環依存関係を作成しないように注意してください。

PropertyChangedCallback は、イベント データ内の OldValueNewValue が異なる場合にのみ呼び出されます。

OldValueNewValue は型指定されていないため、実行する比較にはキャストが必要な場合があります。 多くの依存関係プロパティ値では値型が使用されています。つまり、値型の演算子または他の API に依存して比較を行います。 通常、この機能は、ユーティリティ API として、値を表す構造体で使用できます。 たとえば、 Thickness 値の言語固有のユーティリティ API を使用すると、 Thickness 値を比較できます。

Note

C++ を使用してプログラミングする場合、いくつかのWindows ランタイム構造体は非データ メンバーをサポートしないため、演算子やその他のユーティリティをサポートしないでください。 これらには、C++ コードで使用できる比較 API を提供するコンパニオン Helper クラスがあります。 たとえば、 ColorHelper クラスを使用して Color 値を比較します。

カスタム イベント に DependencyPropertyChangedEventArgs を使用する

カスタム コントロールの実装者は、依存関係プロパティ値の変更の結果としてカスタム イベントが発生した場合、デリゲート型として DependencyPropertyChangedEventHandler を使用することを検討できます。 このようなイベントは、 PropertyChangedCallback のコンテキスト内からのみ発生させることができます。 これは、変更された値 (プロパティ、古い値、および新しい値) が、プロパティ システム レベルでイベントに対して報告される DependencyPropertyChangedEventArgs に含まれている必要があるためです。 ただし、 DependencyPropertyChangedEventArgs のコンストラクターはなく、プロパティのいずれも設定できないため、 DependencyPropertyChangedEventArgs 値を取得する唯一の方法は、元の PropertyChangedCallback パラメーターから取得し、カスタム イベントを発生したときに渡すことです。

プロパティ

名前 説明
NewValue

報告された変更後の依存関係プロパティの値を取得します。

OldValue

報告された変更の前の依存関係プロパティの値を取得します。

Property

値の変更が発生した依存関係プロパティの識別子を取得します。

適用対象

こちらもご覧ください