Поделиться через


DependencyPropertyChangedCallback Делегат

Определение

Представляет обратный вызов, который вызывается при изменении значения свойства для уведомлений об изменении свойств, зарегистрированных с помощью метода RegisterPropertyChangedCallback .

public delegate void DependencyPropertyChangedCallback(DependencyObject ^ sender, DependencyProperty ^ dp);
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(1166556438, 10175, 19393, 172, 38, 148, 193, 96, 31, 58, 73)]
class DependencyPropertyChangedCallback : MulticastDelegate
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.Guid(1166556438, 10175, 19393, 172, 38, 148, 193, 96, 31, 58, 73)]
public delegate void DependencyPropertyChangedCallback(DependencyObject sender, DependencyProperty dp);
Public Delegate Sub DependencyPropertyChangedCallback(sender As DependencyObject, dp As DependencyProperty)

Параметры

sender
DependencyObject

Экземпляр объекта , содержащий свойство для регистрации для уведомления об изменении свойства.

dp
DependencyProperty

Идентификатор свойства зависимостей свойства, регистрируемого для уведомления об изменении свойства.

Атрибуты

Требования к Windows

Семейство устройств
Windows 10 (появилось в 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (появилось в v1.0)

Примеры

В этом примере показано, как использовать делегат DependencyPropertyChangedCallback для прослушивания изменений свойства Tag в TextBlock.

<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 , определяющий, какое значение свойства изменилось, можно использовать один и тот же обратный вызов для обработки нескольких случаев изменения свойств, а логика может записывать варианты для каждого свойства.

Из соображений производительности вы не получаете пару свойств OldValue / NewValue из метода PropertyChangedCallback , как в DependencyPropertyChangedEventArgs. Значение свойства изменяется перед обратным вызовом, поэтому после вызова метода можно вызвать DependencyObject.GetValue , чтобы получить новое значение.

Применяется к

См. также раздел