I see couple potential reasons why DataTemplate can didn't work.
1st - probably you didn't bind Content property of your view with your DataContext (vm:VMUserControl).
2nd - you use custom template of content control without ContentPresenter.
For example:
App.xaml
...
<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" />
</Application.Resources>
...
In your View
Update:
In case if you define two datatemplate for one DataType (viewmodel)
you additional should implement and use own ContentTemplateSelector.
<View ...
DataSource={Binding Source={StaticResource Locator}, Path=YourViewModel}>
<View.Resource>
<ResourceDictionar>
<DataTemplate DataType="{x:Type vm:VMUserControl}"
x:Key="darkDataTemplate">
<views:UCViewDark />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:VMUserControl}"
x:Key="snowDataTemplate">
<views:UCViewSnow/>
</DataTemplate>
<local:CustomContentTemplateSelector x:Key="yourContentTemplateSelector"
FirstDataTemplate={StaticResource snowDataTemplate}
SecondDataTemplate={StaticResource darkDataTemplate} />
</ResourceDictionar>
</View.Resource>
<ContentControl Content={Binding}
ContentTemplateSelector={StaticResource yourContentTemplateSelector}/>
CustomContentTemplateSelector.cs
public class CustomContentTemplateSelector:DataTemplateSelector
{
public DataTemplate FirstDataTemplate {get; set;}
public DataTemplate SecondDataTemplate {get; set;}
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container){
// here you should impelement logic for choose data template
// if (condition)
// return FirstDataTemplate
// else
// return SecondDataTemplate
}
}