Хорошо с DataTemplate является то, что они строго типизированы для классов Viewmodel. Все, что вам нужно сделать, это создать ContentPresenter в View и привязать DataContext к виртуальной машине. Если ваш DataTemplate определен в ResourceDictionary и имеет атрибут DataType вместо Key, WPF внутренне выяснит правильный DataTemplate для класса VM и отобразит его.
Но, как вы упомянули, мы не можем создать шаблон данных в отдельном файле. Таким образом, файл, в котором существуют DataTemplates в ResourceDictionary (например, App.xaml), файл становится действительно грязным, и вскоре становится трудно управлять кодом.
Итак, я считаю, что если виртуальная машина проста, создайте шаблон данных. Или же всегда лучше создать отдельный UserControl и связать его содержимое с виртуальной машиной.