Я использую первый подход viewmodel в своих тестах. поэтому я создаю экземпляр viewmodel через mef, а затем wpf + datatemplates делают все остальное. все, что мне нужно сделать, это привязать мою фактическую модель представления к содержимому contentcontrol.content.
Вы говорите, что важно, чтобы объекты ViewModel создавались только один раз. Вы достигаете этого с помощью mef и creationPolicy.Shared или Lazy <> import. Имея это в виду, я думаю, что ViewModel-First - это путь, по которому вы должны идти. это просто, и вам не нужен дополнительный локатор или wathever:)