Я исследую использование пользовательского TypeDescriptors
для перехвата, когда свойство с привязкой к данным в элементе управления WPF устанавливает свойство CLR.По причинам, мне необходимо выяснить, какой именно элемент управления устанавливает значение.
Если я использую INotifyPropertyChanged
, я получу все различные элементы управления, которые подписываются на любое свойство в моей модели представления, а не все, чтополезно.Поэтому я решил пойти по пользовательскому пути TypeDescriptor
и попробовать пути ProperyDescriptor.AddValueChanged
и PropertyDescriptor.OnValueChanged
.
Я вижу, что WPF вызывает ProperyDescriptor.AddValueChanged
, как и ожидалось, но мой вызов ProperyDescriptor.OnValueChanged
кажется, что никогда не запускается вызов PropertyDescriptor.GetValue
и обновление в пользовательском интерфейсе.
Есть ли какие-то ошибки при использовании этого материала, который я пропускаю?Или есть другие способы выяснить, кто подписывается на свойство CLR.Моя альтернатива, как я вижу это сейчас, - это создание собственного прокси для всего шебанга, но я бы очень хотел, чтобы этого не делали.
Редактировать: Глядя немного ближе, я заметил, чтоделегаты, которых я получаю через PropertyDescriptor.AddValueChanged
, идут в какой-то внутренний вспомогательный класс MS, поэтому без некоторого ненадежного отражения-фу нет способа использовать это для получения контроля над исходным кодом.Я думаю, мне придется использовать собственный прокси со свойствами зависимостей.