我有以下代码订阅VisiblePosition
类Column
属性的属性更改事件:
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ColumnBase.VisiblePositionProperty, typeof(Column));
if (dpd != null)
{
dpd.AddValueChanged(col, ColumnVisiblePositionChangedHandler);
}
以下是ColumnVisiblePositionChangedHandler
方法的定义:
static internal void ColumnVisiblePositionChangedHandler(object sender, EventArgs e)
问题是我需要获取属性的旧值。我该怎么做?
谢谢,
答案 0 :(得分:16)
不幸的是,在以这种方式注册属性更改事件处理程序时,您不会获得旧的值信息。
一种解决方法是将属性值存储在某处(这是您的'旧'值),然后将其与事件处理程序中的当前值进行比较。
另一种解决方法是创建自己的依赖项属性(DP)并在DP和控件的DP之间创建绑定。这将为您提供WPF样式的更改通知。
答案 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
}