Прослушайте событие изменения DependencyProperty и получите старое значение - PullRequest
18 голосов
/ 12 января 2012

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

16 голосов
/ 25 июля 2013

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

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

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

Вот статья об этом .

7 голосов
/ 12 января 2012

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