O que é ViewModelLocator e quais são seus prós / contras em comparação com DataTemplates?

Alguém pode me dar um rápido resumo do que é um ViewModelLocator, como funciona e quais são os prós / contras de usá-lo em comparação com DataTemplates? Eu tentei encontrar informações no Google, mas parece haver muitas implementações diferentes dele e nenhuma lista forte sobre o que é e os prós /...