Совместное использование DataContext для UserControl безопасным способом - PullRequest
2 голосов
/ 04 января 2011

Я разрабатываю свое первое приложение Silverlight 4 и изо всех сил пытаюсь поделиться моим набором DataContext на верхнем элементе (сетке) в моем MainPage.xaml в базовом UserControl, безопасным для типов способом. DataContext является экземпляром моего класса ViewModel, и я думаю, что можно связать определенные элементы в UserControl со свойствами ViewModel.

Я почти уверен, что объект ViewModel переходит в мой UserControl, но как в UserControl убедиться, что DataContext имеет тип PatternCreatorViewModel?

Надеюсь, это было понятно!

1 Ответ

5 голосов
/ 04 января 2011

Это (по моему одинокому мнению) одно из самых больших ограничений модели привязки данных в Silverlight и WPF, а именно, что нигде в процессе нет безопасности типов. Как только вы набираете {Binding ...}, вы работаете без сети. MS удалось взять чудесный язык со строгой типизацией, такой как C #, и связать его с совершенно не типичной моделью привязки данных, тем самым почти уничтожив десятилетие замечательной работы Андерса Хейлсберга над C #. Вы ожидаете такого рода «слабости» при работе с динамическими языками, но не когда имеете дело с C #.

Это ограничение действительно становится проблематичным, когда вы меняете ViewModel, лежащую в основе ваших Views, потому что, конечно, нет простого способа проверить ваши привязки данных. Обычно, когда у вас есть код, который вы не можете протестировать, вы можете, по крайней мере, положиться на компилятор, который скажет вам, не имеет ли смысл то, что вы просите сделать код. Но поскольку MS сделала привязки данных небезопасными, вы не только не можете проверить свои изменения, вы даже не можете полагаться на то, что компилятор сообщит вам, когда они не имеют никакого смысла. И, чтобы добавить оскорбление к травме, вы даже не можете рассчитывать на то, что ваше приложение будет запущено и вы увидите какие-либо сообщения об ошибках: потому что привязки всегда терпят неудачу молча. Лучшее, что вы можете сделать, это повысить уровень ведения журнала и просмотреть множество сообщений об ошибках отладки. Uggh. Гадкий как черт.

См. Мое сообщение в блоге здесь , другой вопрос, который я задал здесь , и мой ответ здесь , чтобы узнать больше о лежащей в основе проблеме.

Я должен отметить, что я, кажется, практически один в своем мнении об этом, так что, возможно, есть что-то огромное, что я просто скучаю. Но я лично думаю, что ты ударил гвоздь прямо в голову.

...