Часто бывает, что есть некий потомок DependencyObject, у него есть DependencyProperty, а вот события сообщающего о том, что свойство изменилось нет. Я с такой ситуацией столкнулся при попытках отследить изменение актуальной ширины DataGridColumn. Ну и под катом, как это все можно провернуть.
Для примера, я воспользуюсь вот таким классом:
Первое изменение свойства прошло тихонечко, а на второе уже сработал вывод.
Для примера, я воспользуюсь вот таким классом:
class MyClass : DependencyObjectНу и как мы можем узнать об изменении этого свойства? До очень просто, вот так:
{
public int MyProperty
{
get { return (int)GetValue(MyPropertyProperty); }
set { SetValue(MyPropertyProperty, value); }
}
// Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.Register("MyProperty", typeof(int), typeof(MyClass), new PropertyMetadata(0));
}
static void Main(string[] args)Ну и вот так это выглядит:
{
MyClass m = new MyClass();
m.MyProperty = 10; // До подписывания
PropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty(MyClass.MyPropertyProperty, typeof(MyClass));
descriptor.AddValueChanged(m, new EventHandler((sender, e) => Console.WriteLine(((MyClass)sender).MyProperty)));
m.MyProperty = 20;
Console.ReadKey();
}
Первое изменение свойства прошло тихонечко, а на второе уже сработал вывод.