2010-05-17 2 views
1

Сначала я объясню контекст проблемы, потому что вы можете указать мне в лучшем направлении.Событие WPF DependencyProperty до изменения содержимого

Мне нужно реализовать подобную систему отмены, например, на объекте. Объект имеет ряд свойств зависимостей. Некоторые из них - double, int, string, но некоторые из них также относятся к типу DependencyObject. Мне нужно сохранить значение свойства до его изменения, и для этого я добавил CoerceValueCallback.

public static readonly DependencyProperty MyBackgroundProperty = 
     DependencyProperty.Register("MyBackground", typeof(MyCustomizableBackground), 
      typeof(MyComponent), new UIPropertyMetadata(default(MyCustomizableBackground), null, new CoerceValueCallback(OnPropertyChanging))); 

В OnPropertyChanging Я сохраняю значение до его изменения. MyCustomizableBackground - это DependencyObject, который также имеет некоторые свойства зависимостей.

Проблема в том, что в этом случае, когда у меня есть пользовательский объект как свойство, метод OnPropertyChanging не запускается, но когда у меня есть общий тип, он запускается.

Позже редактирование: я понял, что часть моего вопроса была довольно неоднозначной, и я задал отдельный вопрос here. Для первой части проблемы Жюльен указал мне в лучшем направлении.

ответ

1

Свойство измененного обратного вызова является вторым параметром конструктора в вашем случае, а не третьим, как вы использовали, который является обратным вызовом принудительного значения.

Редактировать: в ответ на ваш комментарий дважды проверьте, что MyComponent является хорошим типом, владеющим собственностью. Я помню, что имел аналогичную проблему некоторое время назад после копирования/вставки DP и забывания изменить тип владельца.

+0

Да, вы правы, имя моего метода неуместно, но я хочу сохранить значение перед изменением. Поэтому я использую CoerceValueCallback. Я изменил имя метода. – morsanu

+0

Да, но свойствоChanged дает параметры OldValue и NewValue в параметрах, так что это именно то, что вам нужно. Призыв к Coerce не означает, что значение изменилось. –

+0

Вы снова правы, вы должны были объяснить это с самого начала. Но проблема сохраняется, изменение пользовательского свойства объекта не вызывает метод. – morsanu

Смежные вопросы