Я определенно в меньшинстве на этом, но я склонен согласиться с @Shnitzel. MVVM и связывание, которое идет рука об руку с ним, являются отличными идеями, но они плохо обслуживаются текущими инструментами MS. Синтаксис для всех, кроме самых простых привязок, очень трудно понять правильно, и он значительно усложняется тем фактом, что WPF и Silverlight молча поглощают все ошибки. (Да, некоторые ошибки отображаются в окне отладки, но их недостаточно, и не достаточно подробно.) Вы можете использовать такие хаки, как написание преобразователя значения отладки, но факт остается фактом, что набор инструментов все еще довольно незрелый. (И еще есть моя стандартная жалоба, что привязка данных не является строго типизированной, а это означает, что инструменты не могут поймать ошибки за вас.)
Я слышу всех, когда они настаивают на тестируемости, и я большой поклонник автоматизированного тестирования. Но по крайней мере с текущим состоянием нашего инструментария, улучшенная тестируемость MVVM имеет довольно большую цену.
Рассмотрим этот сценарий: у вас есть большое приложение с более чем 50 формами / страницами, и вы только что провели серьезный рефакторинг вашей модели и модели представления. В процессе вы переименовали группу классов и свойств и т. Д. Теперь найдите каждое место в вашем XAML, которое вам нужно изменить, чтобы отразить новые имена классов и свойств. Так много для тестируемости, а? Мало того, что IDE не поймает ваши ошибки привязки, компилятор не поймает их, и, что лучше всего, приложение даже не выдаст ошибку во время выполнения. Вы должны получить тестер для запуска всего приложения и убедиться, что все ваши привязки все еще выполняют то, что вы от них хотите. Ugggh. Уродливый и болезненный. По крайней мере, когда я делал вещи старомодным способом, компилятор сообщал мне, когда я что-то написал неправильно.
Возвращаясь в мою пещеру, чтобы избежать слингов и стрел, быстро направляющихся ко мне ...
[Edit 12/10/2010 - MS недавно объявила, что SL5 будет иметь возможность отладки привязок данных , включая возможность устанавливать на них точки останова, чтобы вы могли видеть, что происходит. Это большой шаг в правильном направлении. Это все еще не решает, как я считаю, фундаментальную проблему: привязка данных не имеет проверки типов во время компиляции, но она несколько повышает полезность набора инструментов.]