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

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.

主站蜘蛛池模板: 朝阳区| 曲阳县| 洪洞县| 南城县| 凤台县| 柳林县| 哈尔滨市| 油尖旺区| 舒兰市| 衡阳市| 奉节县| 蒙城县| 郴州市| 筠连县| 丰都县| 永兴县| 德州市| 武陟县| 阜阳市| 抚宁县| 游戏| 宝鸡市| 百色市| 余干县| 孝义市| 普安县| 通海县| 惠来县| 博罗县| 通州区| 潮安县| 郑州市| 东港市| 涪陵区| 安康市| 江永县| 延庆县| 全州县| 新昌县| 西贡区| 忻城县|