收听DependencyProperty更改事件并获取旧值

时间:2012-01-11 23:31:57

标签: wpf dependency-properties

我有以下代码订阅VisiblePositionColumn属性的属性更改事件:

DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ColumnBase.VisiblePositionProperty, typeof(Column));

if (dpd != null)
{
   dpd.AddValueChanged(col, ColumnVisiblePositionChangedHandler);
}

以下是ColumnVisiblePositionChangedHandler方法的定义:

static internal void ColumnVisiblePositionChangedHandler(object sender, EventArgs e)

问题是我需要获取属性的旧值。我该怎么做?

谢谢,

2 个答案:

答案 0 :(得分:16)

不幸的是,在以这种方式注册属性更改事件处理程序时,您不会获得旧的值信息。

一种解决方法是将属性值存储在某处(这是您的'旧'值),然后将其与事件处理程序中的当前值进行比较。

另一种解决方法是创建自己的依赖项属性(DP)并在DP和控件的DP之间创建绑定。这将为您提供WPF样式的更改通知。

这是article about this

答案 1 :(得分:7)

您可以在附加的事件处理程序中注册依赖项属性时执行此操作。请在下面找到依赖项属性的语法以及如何在PropertyChanged事件处理程序上获取旧值:

//Declaration of property
public static readonly DependencyProperty MyNameProperty =
            DependencyProperty.Register("MyName", typeof(PropertyType),
                                        typeof(ClassName),
                                        new PropertyMetadata(null,
                                                             new PropertyChangedCallback(MyNameValueChanged)));

//PropertyChanged event handler to get the old value
private static void MyNameValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
{
    object oldValue = eventArgs.OldValue; //Get the old value
}