У меня похожая проблема (но без использования Moq). Частичное решение, которое я использовал, - это наследование KeyboardViewModel и KeyboardViewModelMock от абстрактного KeyboardViewModelAbstract. Тогда вы можете сделать:
<DataTemplate DataType="{x:Type vm:KeyboardViewModelAbstract}">
<vw:Keyboard />
</DataTemplate>
Что будет работать как для реального объекта модели, так и для макета.
К сожалению, это решение не масштабируется, когда вы имеете дело с моделями, которые уже имеют базовый класс или имеют какое-либо наследование. Было бы здорово, если бы DataTemplate можно было использовать с интерфейсами, но они не могут.