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

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.

主站蜘蛛池模板: 北海市| 凤阳县| 祁阳县| 乐山市| 宁夏| 琼结县| 鄂托克前旗| 兴仁县| 县级市| 成安县| 荥经县| 阳原县| 洪湖市| 中卫市| 凤凰县| 敖汉旗| 女性| 淅川县| 普兰店市| 赣州市| 新乡市| 绵阳市| 兴海县| 山丹县| 安平县| 永年县| 元阳县| 博白县| 漳州市| 襄城县| 通榆县| 连云港市| 麻城市| 迁西县| 康马县| 锦州市| 丰台区| 镇康县| 江阴市| 武隆县| 郸城县|