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
Экземпляр объекта , содержащий свойство для регистрации для уведомления об изменении свойства.
Идентификатор свойства зависимостей свойства, регистрируемого для уведомления об изменении свойства.
- Атрибуты
Требования к 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 , чтобы получить новое значение.