Qu'est-ce qu'un ViewModelLocator et quels sont ses avantages / inconvénients par rapport aux DataTemplates?

Quelqu'un peut-il me donner un bref résumé de ce qu'est un ViewModelLocator, de son fonctionnement et des avantages / inconvénients de son utilisation par rapport aux DataTemplates? J'ai essayé de trouver des informations sur Google mais il semble y avoir de nombreuses implémentations différentes...