官术网_书友最值得收藏!

Catching changing Dependency Property values

As we saw at the beginning of this chapter, the WPF Framework won't call the CLR property wrappers of our Dependency Properties when the property values are changing. However, there is a way to accomplish this using callback handlers. In fact, we've already seen an example of this when we were looking at the creation of the OnEnterKeyDown Attached Property. Let's remind ourselves what that looked like:

public static DependencyProperty OnEnterKeyDownProperty =  
  DependencyProperty.RegisterAttached("OnEnterKeyDown", 
typeof(ICommand), typeof(TextBoxProperties),
new PropertyMetadata(OnOnEnterKeyDownChanged));

...
public static void OnOnEnterKeyDownChanged(
DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { TextBox textBox = (TextBox)dependencyObject; if (e.OldValue == null && e.NewValue != null) textBox.PreviewKeyDown += TextBox_OnEnterKeyDown; else if (e.OldValue != null && e.NewValue == null) textBox.PreviewKeyDown -= TextBox_OnEnterKeyDown; }

For this Attached Property, we used a particular overload of the DependencyProperty.RegisterAttached method that accepts a PropertyMetadata object, which enabled us to assign a PropertyChangedCallback handler to the property. Note that there is an identical overload for the DependencyProperty.Register method for declaring Dependency Properties.

Program execution will enter these PropertyChangedCallback handlers each time their related Dependency Property changes, so that makes them perfect for debugging their values. While we don't often need to attach these handlers, it only takes a moment to add one when we need to and they enable us to find out what's going on with the Dependency Property values at runtime.

主站蜘蛛池模板: 桦川县| 临清市| 金华市| 荆门市| 翼城县| 兰州市| 巴南区| 定襄县| 鹤壁市| 北流市| 额敏县| 哈尔滨市| 巴青县| 阆中市| 麻城市| 芒康县| 黔东| 潜山县| 垫江县| 新宾| 佳木斯市| 宁波市| 建瓯市| 安阳县| 温泉县| 崇信县| 两当县| 鄂温| 克拉玛依市| 柳河县| 吉林省| 遂溪县| 英吉沙县| 左云县| 富锦市| 澜沧| 河池市| 卫辉市| 大同县| 永和县| 牟定县|