Обнаружение DataContext изменено в Silverlight - PullRequest
5 голосов
/ 08 февраля 2011

У меня вопрос из нескольких частей:

(1) Есть ли веская причина, по которой Silverlight не предоставляет событие DataContextChanged? Похоже, можно было бы избежать многих хлопот, если бы кто-то в Microsoft просто изменил internal на public в классе FrameworkElement (как это делает WPF).

(2) Я нашел один или два различных метода взлома вашего пути к событию DataContextChanged с использованием DependencyProperties в той или иной конфигурации. Но я не могу заставить их работать надежно. До сих пор мое тестирование показало, что они запускают взломанное событие DataContextChanged для первого класса, к которому я их подключаю, но не для других классов. Кто-нибудь еще сталкивался с этой проблемой? Или, еще лучше, они обошли это?

(3) Причина, по которой я дал себе желание узнать, когда изменился мой DataContext, заключается в том, что есть некоторые операции пользовательского интерфейса, которые сложно понять прямо в XAML, но тривиальны в коде позади; и для многих из этих вещей мне нужно обрабатывать события, вызванные моей ViewModel; и, следовательно, мне нужно знать, когда изменилась моя ViewModel, чтобы я мог подключить обработчики событий. Это точное представление о мире? Или тот факт, что я хочу иметь дело с подобными вещами в коде, является довольно хорошим свидетельством того, что мое мышление сорвалось с пути? Я не пурист MVVM: я просто хочу быстро перейти к хорошему коду, и мне все равно, как я туда доберусь. Кодовый код служил мне достаточно хорошо уже более десяти лет, и я не собираюсь отказываться от него полностью. Но разве мой прагматизм мешает мне в этот момент?

1 Ответ

2 голосов
/ 18 февраля 2011

«Но разве мой прагматизм мешает мне самому себе в этот момент?»

Я бы не назвал это прагматизмом.Я бы назвал это страхом перемен;пребывание в вашей зоне комфорта.На самом деле жизнь намного проще, если вы откажетесь от своего старого мышления и примете новое (и я точно знаю, что вы имеете в виду - я был в той же лодке, что и вы, с кодом позади).

Теперь, с моего мыльного ящика и на более практичный ответ:

Если вы хотите обнаружить изменения в вашей модели, то подключитесь к событиям, которые позволяют обнаруживать изменения в ваша модель .DataContext на самом деле не является моделью ... Все ваши объекты модели будут иметь реализацию INotifyPropertyChanged.Вы должны либо подключиться к этому для данной модели, либо подключиться к чему-то похожему для ObservableCollection.

Silverlight / WPF упрощают все эти вещи теперь, когда привязка данных фактически работает .

Не боритесь с рамками.Не приносите с собой в игру старые практики ASP.Net ... Это вам не поможет.Таким образом вы потеряете лучшие части силы фреймворка.

Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...