Часто бывает, что есть некий потомок 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(); }Ну и вот так это выглядит:
Первое изменение свойства прошло тихонечко, а на второе уже сработал вывод.
Комментариев нет:
Отправить комментарий