DependencyPropertyChangedEventArgs クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
依存関係プロパティの値が変更されたときに呼び出 される PropertyChangedCallback 実装のデータを提供します。 また、 Control.IsEnabledChanged イベントおよび DependencyPropertyChangedEventHandler デリゲートを使用するその他のイベントのイベント データも提供します。
public ref class DependencyPropertyChangedEventArgs sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DependencyPropertyChangedEventArgs final
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class DependencyPropertyChangedEventArgs final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DependencyPropertyChangedEventArgs
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class DependencyPropertyChangedEventArgs
Public NotInheritable Class DependencyPropertyChangedEventArgs
- 継承
- 属性
Windows の要件
デバイス ファミリ |
Windows 10 (10.0.10240.0 で導入)
|
API contract |
Windows.Foundation.UniversalApiContract (v1.0 で導入)
|
例
この例では、 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();
}
Private Shared Sub ValueChangedCallback(ByVal obj As DependencyObject, _
ByVal args As DependencyPropertyChangedEventArgs)
Dim ctl As NumericUpDown = DirectCast(obj, NumericUpDown)
Dim newValue As Integer = args.NewValue
' Update the TextElement to the new value.
If ctl.TextElement IsNot Nothing Then
ctl.TextElement.Text = newValue.ToString()
End If
注釈
DependencyPropertyChangedEventArgs は、依存関係プロパティ値の変更を伴う 2 つの異なる状況のデータを提供します。
- カスタム依存関係プロパティの PropertyChangedCallback によって使用される状況コールバック情報。 これは、より一般的なケースです。
- DependencyPropertyChangedEventHandler に基づくイベントのイベント データ。 このデリゲートを使用するWindows ランタイム イベントは Control.IsEnabledChanged イベントだけなので、これはあまり一般的ではありません。 この場合の DependencyPropertyChangedEventArgs イベント データの使用方法の詳細については、「 DependencyPropertyChangedEventHandler 」または 「Control.IsEnabledChanged」を参照してください。
PropertyChangedCallback 実装は、依存関係プロパティを登録するときに指定するプロパティ メタデータの省略可能な部分です。 コールバックは、依存関係プロパティ システムによって内部的に呼び出されます。 一般的な依存関係プロパティの詳細については、「 カスタム依存関係プロパティ」と「依存関係プロパティ の 概要」を参照してください。
通常は、プライベートまたは内部アクセスを使用して メソッドを定義します。 メソッドを静的にする必要があります。 メソッドは静的であるため、PropertyChangedCallback デリゲートの DependencyObject パラメーター (d) が重要です。 これは、プロパティが変更されている特定の依存関係オブジェクト インスタンスを識別するものです。 値の修正や強制、同じオブジェクトに対する応答での別の計算プロパティ値の変更など、多くの操作では、この DependencyObject を参照します。 通常は、変更するプロパティの所有者の型にキャストします。 所有者の型は、 DependencyProperty.Register 呼び出しで名前によって参照される型です。 PropertyChangedCallback がプロパティ メタデータに割り当てられているメタデータは、その同じ呼び出しの一部です。
再帰の可能性に注意してください。 PropertyChangedCallback が呼び出される依存関係プロパティの値を変更すると、再び呼び出されます。 たとえば、コールバックが常に値を 2 で除算する Double プロパティのコールバックを作成した場合、そのコールバックは再帰的に呼び出され、アプリは無限ループになります。
2 つ以上の異なる依存関係プロパティでコールバックを定義して相互に変更することは有効ですが、値が安定しない意図しない循環依存関係を作成しないように注意してください。
PropertyChangedCallback は、イベント データの OldValue と NewValue が異なる場合にのみ呼び出されます。
OldValue と NewValue は型指定されていないため、実行する比較にはキャストが必要な場合があります。 多くの依存関係プロパティ値では値型が使用されています。つまり、値型の演算子または他の API に依存して比較を行います。 通常、この機能は、ユーティリティ API として値を表す構造体で使用できます。 たとえば、 Thickness 値の言語固有のユーティリティ API を使用すると、 Thickness 値を比較できます。
注意
C++ を使用してプログラミングを行う場合、いくつかのWindows ランタイム構造体では非データ メンバーがサポートされないため、演算子やその他のユーティリティはサポートしないでください。 このため、C++ コードで使用できる比較 API を提供するコンパニオン ヘルパー クラスがあります。 たとえば、 ColorHelper クラスを使用して Color 値を比較します。
カスタム イベントに DependencyPropertyChangedEventArgs を使用する
カスタム コントロールの実装者は、依存関係プロパティの値の変更の結果としてカスタム イベントが発生した場合に、デリゲート型として DependencyPropertyChangedEventHandler を使用することを検討できます。 このようなイベントは、 PropertyChangedCallback のコンテキスト内からのみ発生させることができます。 これは、変更された値 (プロパティ、古い値、および新しい値) が、プロパティ システム レベルでイベントに対して報告される DependencyPropertyChangedEventArgs 内に存在する必要があるためです。 ただし、DependencyPropertyChangedEventArgs のコンストラクターはなく、そのプロパティも設定できないため、DependencyPropertyChangedEventArgs 値を取得する唯一の方法は、元の PropertyChangedCallback パラメーターから取得し、カスタム イベントを発生させたときに渡すことです。
プロパティ
NewValue |
報告された変更後の依存関係プロパティの値を取得します。 |
OldValue |
報告された変更の前に依存関係プロパティの値を取得します。 |
Property |
値が変更された依存関係プロパティの識別子を取得します。 |