Отслеживание изменений значений свойств зависимостей на глобальном уровне
У меня есть несколько элементов управления в моем приложении (которые пользователь может добавить на холст), каждый из которых имеет различные свойства (в основном свойства зависимости). Пользователь может изменять свои свойства через сетку свойств (например, цвет, текст и т. Д.).
Я реализовал функцию сохранения, поэтому, если пользователь вносит какие-либо изменения в canvas, мы просим его сохранить документ перед отъездом. В настоящее время я отслеживаю операции добавления / удаления / изменения размера (изменение флага IsChanged на true). Я также хочу отслеживать любые изменения свойств, сделанные пользователем, скажем, если он меняет цвет элемента управления через propertygrid.
Одно простое решение - обработать PropertyChangedCallback для каждого объекта и установить соответствующий флаг. Проблема в том, что мне придется писать PropertyChangedCallback для каждого объекта в каждом элементе управления, и в то же время мне нужно следить за тем, чтобы каждый новый добавленный объект делал то же самое.
Мой вопрос: есть ли другой лучший способ отслеживания изменений собственности, скажем, в каком-то глобальном месте?
1 ответ
Если ваши объекты / классы являются DependencyObjects, вы можете создать свой собственный "базовый класс", производный от DependencyObject, который переопределяет OnPropertyChanged:
http://msdn.microsoft.com/en-us/library/system.windows.dependencyobject.onpropertychanged.aspx
В реализации вы можете зарегистрировать, что объект изменился в каком-то одноэлементном или связанном с ним классе менеджера отслеживания изменений, а затем вызвать base.OnPropertyChanged.
Затем измените все свои объекты, чтобы реализовать этот новый класс, а не DependencyObject, и когда любые свойства изменятся, будет вызван ваш код.
Надеюсь, это поможет!