Прослушайте событие DependencyProperty changed и получите старое значение

у меня есть следующий код для подписки на событие изменения свойства для 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)

проблема в том, что мне нужно получить старое значение свойства. Как мне это сделать?

спасибо,

2 ответов


к сожалению, вы не получаете старую информацию о значении при регистрации обработчика событий с измененным свойством таким образом.

один обходной путь-сохранить значение свойства где-нибудь (это ваше "старое" значение), а затем сравнить его с текущим значением в обработчике событий.

другим обходным путем является создание собственного свойства зависимостей (DP) и создание привязки между вашим DP и DP элемента управления. Это даст вам уведомление об изменении в стиле WPF.

здесь статьи об этом.


Это можно сделать при регистрации свойства зависимостей в обработчике вложенных событий. Ниже приведен синтаксис свойства зависимостей и как получить старое значение на 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
}