DependencyPropertyChangedEventArgs クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
依存関係プロパティの値が変更されたときに呼び出 される 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
- 継承
- 属性
例
この例では、イベント データを使用する PropertyChangedCallback 実装を DependencyPropertyChangedEventArgs
示します。 特に、 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
の詳細については、 またはControl.IsEnabledChanged
を参照してくださいDependencyPropertyChangedEventHandler
。
PropertyChangedCallback 実装は、依存関係プロパティを登録するときに指定するプロパティ メタデータの省略可能な部分です。 コールバックは、依存関係プロパティ システムによって内部的に呼び出されます。 一般的な依存関係プロパティの詳細については、「 カスタム依存関係プロパティ」と「依存関係プロパティ の 概要」を参照してください。
通常は、プライベートまたは内部アクセスを使用して メソッドを定義します。 メソッドを静的にする必要があります。 メソッドは静的であるため、PropertyChangedCallback デリゲートの DependencyObject パラメーター (d) が重要です。 これは、プロパティが変更されている特定の依存関係オブジェクト インスタンスを識別するものです。 値の修正や強制化、同じオブジェクトに対する応答での別の計算プロパティ値の変更など、多くの操作では、この DependencyObject
を参照します。 通常は、変更するプロパティの所有者の型にキャストします。 所有者の型は、 DependencyProperty.Register 呼び出しで名前によって参照される型です。がプロパティ メタデータ PropertyChangedCallback
に割り当てられているメタデータは、同じ呼び出しの一部です。
再帰の可能性に注意してください。
PropertyChangedCallback が呼び出される依存関係プロパティの値を変更すると、もう一度呼び出されます。 たとえば、コールバックが常に値を 2 で除算するプロパティの Double
コールバックを作成した場合、そのコールバックは再帰的に呼び出され、アプリは無限ループになります。
2 つ以上の異なる依存関係プロパティで相互に変更するコールバックを定義することは有効ですが、値が安定しない意図しない循環依存関係を作成しないように注意してください。
PropertyChangedCallback は、イベント データの OldValue と NewValue が異なる場合にのみ呼び出されます。
OldValue と NewValue は型指定されていないため、実行する比較にはキャストが必要になる可能性があります。 多くの依存関係プロパティ値では値型が使用されています。つまり、値型の演算子または他の API に依存して比較を行います。 この機能は、通常、ユーティリティ API として値を表す 構造体で使用できます。 たとえば、 Thickness 値の言語固有のユーティリティ API を使用すると、値を比較 Thickness
できます。
Note
C++ を使用してプログラミングを行う場合、いくつかのWindows ランタイム構造体では非データ メンバーがサポートされていないため、演算子やその他のユーティリティはサポートされません。 これらには、C++ コードで使用できる比較 API を提供するコンパニオン Helper
クラスがあります。 たとえば、 ColorHelper クラスを使用して Color 値を比較します。
カスタム イベント に DependencyPropertyChangedEventArgs を使用する
カスタム コントロールの実装者は、依存関係プロパティ値の変更の結果としてカスタム イベントが発生した場合に、デリゲート型として DependencyPropertyChangedEventHandler を使用することを検討できます。 このようなイベントは、 PropertyChangedCallback のコンテキスト内からのみ発生させることができます。 これは、変更された値 (プロパティ、古い値と新しい値) は、プロパティ システム レベルで DependencyPropertyChangedEventArgs
イベントに対して報告される に含まれている必要があるためです。 ただし、 の DependencyPropertyChangedEventArgs
コンストラクターはなく、プロパティのいずれも設定できないため、値を取得 DependencyPropertyChangedEventArgs
する唯一の方法は、元 PropertyChangedCallback
のパラメーターから取得し、カスタム イベントを発生したときに渡すことです。
プロパティ
NewValue |
報告された変更後の依存関係プロパティの値を取得します。 |
OldValue |
報告された変更の前の依存関係プロパティの値を取得します。 |
Property |
値が変更された依存関係プロパティの識別子を取得します。 |