Используемый вами метод (с неявно типизированными DataTemplates) работает нормально в WPF, но, к сожалению, он не работает в Silverlight. Это одна из причин, почему я предпочитаю использовать более явный метод, который работает в обоих мирах.
Кроме того, неявно типизированные DataTemplates могут немного сбивать с толку, поскольку не всегда понятно, откуда берется шаблон. Это может иногда усложнять работу интегратора, особенно для небольших изменений пользовательского интерфейса (было сделано, сделано это:)
Нет необходимости использовать ViewModelLocator в MVVM Light, это просто способ, который работает хорошо и довольно легко понять (для людей, читающих код, которые не знакомы с тонкостями WPF / SL). В конце концов, это вопрос предпочтений, но в последнее время популярность шаблона ViewModelLocator, похоже, растет (см., Например, этот пост, где универсальный ViewModelLocator используется вместе с MEF).
http://www.johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum/
Наконец, позвольте мне добавить, что меня не очень устраивает текущая реализация ViewModelLocator в MVVM Light, и я хочу предложить гораздо более общее решение в следующей версии.