+2  A: 

Instead of setting the DataContext, you should set the Content:

<ContentPresenter Content="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}"/>

This will ensure the appropriate DataTemplate is resolved based on the type of the Content.

HTH, Kent

Kent Boogaart
Wow! Perfect solution, thanks! (Where's the upvote twice button?)
Pieter Breed