0

У меня есть несколько элементов управления в моем приложении (которые пользователь может добавить на холст), каждый из которых имеет различные свойства (в основном свойства зависимостей). Пользователь может изменять свои свойства через сетку свойств (например, цвет, текст и т. Д.).Отслеживание изменений стоимости свойства зависимостей на глобальном уровне

У меня есть встроенная функция сохранения, поэтому, если пользователь вносит какие-либо изменения в холст, мы просим его сохранить документ перед отъездом. В настоящее время я отслеживаю Add/Delete/Resize как операции (изменение флага IsChanged на true). Я также хочу отслеживать любые изменения свойств, сделанные пользователем, скажем, если он изменит цвет элемента управления через свойствоgrid.

Одно прямое решение - обрабатывать PropertyChangedCallback для каждого proecprty и устанавливать в нем флаг. Проблема заключается в том, что мне придется писать PropertyChangedCallback для каждой функции в каждом элементе управления, и в то же время мне нужно будет убедиться, что каждый добавленный новый proeprty делает то же самое.

Мой вопрос: Есть ли другой лучший способ отслеживания изменений свойств, скажем, в каком-то глобальном месте?

ответ

1

Если объекты/классы DependencyObjects, вы можете создать свой собственный 'базовый класс', выводя из DependencyObject, который переопределяет OnPropertyChanged:

http://msdn.microsoft.com/en-us/library/system.windows.dependencyobject.onpropertychanged.aspx

В реализации можно зарегистрировать, что объект был изменен в некотором одноэлементном или связанном с ним менеджере отслеживания изменений, а затем вызовите base.OnPropertyChanged.

Затем измените все свои объекты, чтобы реализовать этот новый класс, а не DependencyObject, и при изменении свойств код будет вызван.

Надеюсь, что это поможет!

+0

Точно то, что я искал :) У меня уже есть базовый класс для моих элементов управления, которые производятся от UserControl, поэтому реализация этого была простой. :) – akjoshi

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