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

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.

主站蜘蛛池模板: 社旗县| 嵩明县| 沈丘县| 英山县| 利辛县| 潮州市| 故城县| 鄄城县| 邵阳县| 平罗县| 宁阳县| 东阿县| 阳朔县| 石嘴山市| 西峡县| 襄城县| 柳河县| 积石山| 六盘水市| 望奎县| 泗阳县| 沅江市| 岳普湖县| 罗江县| 石棉县| 福泉市| 武川县| 深圳市| 壤塘县| 华亭县| 宜丰县| 临武县| 蒲城县| 富顺县| 青田县| 湖南省| 微山县| 全椒县| 永善县| 兰西县| 南召县|