DependencyPropertyChangedCallback 대리자
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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
속성 변경 알림에 등록할 속성을 보유하는 개체 instance.
속성 변경 알림에 등록할 속성의 종속성 속성 식별자입니다.
- 특성
예제
이 예제에서는 DependencyPropertyChangedCallback 대리자를 사용하여 TextBlock의 Tag 속성에 대한 변경 내용을 수신 대기하는 방법을 보여줍니다.
<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 호출에 지정된 매개 변수와 이를 호출한 instance 기반으로 합니다.
콜백에는 변경된 속성 값을 식별하는 dp 매개 변수가 있으므로 동일한 콜백을 사용하여 여러 속성 변경 사례를 처리할 수 있으며 논리는 서로 다른 각 속성에 대한 사례를 작성할 수 있습니다.
성능상의 이유로 DependencyPropertyChangedEventArgs에서 수행하는 것처럼 PropertyChangedCallback 메서드에서 OldValue / NewValue 속성 쌍을 얻을 수 없습니다. 속성 값은 콜백 전에 변경되므로 메서드가 호출되면 DependencyObject.GetValue 를 호출하여 새 값을 검색할 수 있습니다.