У меня вопрос из нескольких частей:
(1) Есть ли веская причина, по которой Silverlight не предоставляет событие DataContextChanged? Похоже, можно было бы избежать многих хлопот, если бы кто-то в Microsoft просто изменил internal
на public
в классе FrameworkElement (как это делает WPF).
(2) Я нашел один или два различных метода взлома вашего пути к событию DataContextChanged с использованием DependencyProperties в той или иной конфигурации. Но я не могу заставить их работать надежно. До сих пор мое тестирование показало, что они запускают взломанное событие DataContextChanged для первого класса, к которому я их подключаю, но не для других классов. Кто-нибудь еще сталкивался с этой проблемой? Или, еще лучше, они обошли это?
(3) Причина, по которой я дал себе желание узнать, когда изменился мой DataContext, заключается в том, что есть некоторые операции пользовательского интерфейса, которые сложно понять прямо в XAML, но тривиальны в коде позади; и для многих из этих вещей мне нужно обрабатывать события, вызванные моей ViewModel; и, следовательно, мне нужно знать, когда изменилась моя ViewModel, чтобы я мог подключить обработчики событий. Это точное представление о мире? Или тот факт, что я хочу иметь дело с подобными вещами в коде, является довольно хорошим свидетельством того, что мое мышление сорвалось с пути? Я не пурист MVVM: я просто хочу быстро перейти к хорошему коду, и мне все равно, как я туда доберусь. Кодовый код служил мне достаточно хорошо уже более десяти лет, и я не собираюсь отказываться от него полностью. Но разве мой прагматизм мешает мне в этот момент?