DependencyPropertyChangedCallback 代理人

定義

RegisterPropertyChangedCallback 手法に登録されているプロパティ変更通知に対して、プロパティ値が変更されたときに呼び出されるコールバックを表します。

public delegate void DependencyPropertyChangedCallback(DependencyObject ^ sender, DependencyProperty ^ dp);
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.Guid(4032150305, 8603, 23308, 128, 93, 188, 174, 218, 225, 84, 88)]
public delegate void DependencyPropertyChangedCallback(DependencyObject sender, DependencyProperty dp);
Public Delegate Sub DependencyPropertyChangedCallback(sender As DependencyObject, dp As DependencyProperty)

パラメーター

sender
DependencyObject

プロパティ変更通知に登録する プロパティを保持する オブジェクト インスタンス。

dp
DependencyProperty

プロパティ変更通知に登録するプロパティの依存関係プロパティ識別子。

属性

この例では、DependencyPropertyChangedCallback デリゲートを使用して、TextBlockTag プロパティの変更をリッスンする方法を示します。

<TextBlock x:Name="textBlock1" Text="Hello, world"/>
long tagToken;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    long tagToken = textBlock1.RegisterPropertyChangedCallback(TextBlock.TagProperty, tbTagChangedCallback);
    base.OnNavigatedTo(e);

    textBlock1.Tag = "name";
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    textBlock1.UnregisterPropertyChangedCallback(TextBlock.TagProperty, tagToken);
    base.OnNavigatedFrom(e);
}

private void tbTagChangedCallback(DependencyObject sender, DependencyProperty dp)
{
    if (dp == TextBlock.TagProperty)
    {
       // These lines produce the same result.
       System.Diagnostics.Debug.WriteLine("The tag has been set to " + ((TextBlock)sender).Tag);
       System.Diagnostics.Debug.WriteLine("The tag has been set to " + sender.GetValue(dp));
    }
}

注釈

デリゲートのパラメーター値は、プロパティ変更通知の特定のプロパティを登録 した RegisterPropertyChangedCallback 呼び出しに指定されたパラメーターと、それを呼び出したインスタンスに基づいています。

コールバックには、変更されたプロパティ値を識別する dp パラメーターがあるため、同じコールバックを使用して複数のプロパティ変更ケースを処理できます。また、ロジックでは、異なるプロパティごとにケースを記述できます。

パフォーマンス上の理由から、DependencyPropertyChangedEventArgs の場合と同様に、PropertyChangedCallback メソッドから OldValue / NewValue プロパティ ペアを取得することはできません。 プロパティ値はコールバックの前に変更されるため、メソッドが呼び出されたら、 DependencyObject.GetValue を呼び出して新しい値を取得できます。

適用対象

こちらもご覧ください