Не уверен, что я полностью следую, но, вероятно, есть фиксированное количество полей, которые могут быть отображены. Таким образом, вы можете выставить эти поля через модель представления:
public class YourViewModel : ViewModel
{
public string Text
{
//get and set omitted
}
public ImageSource Image1
{
//get and set omitted
}
public ImageSource Image2
{
//get and set omitted
}
}
Каждый ваш шаблон может храниться под другим ключом:
<DataTemplate x:Key="FirstTemplate" DataType="{x:Type local:YourViewModel}">
...
</DataTemplate>
<DataTemplate x:Key="SecondTemplate" DataType="{x:Type local:YourViewModel}">
...
</DataTemplate>
Тогда внутри каждого шаблона можно просто привязать поля к вашей модели представления:
<TextBlock Content="{Binding Text}"/>
<Image Grid.Row="1" Source="{Binding Image1}"/>
<Image Grid.Row="1" Grid.Column="1" Source="{Binding Image2}"/>
Для переключения между шаблонами вы можете просто заменить ресурс на соответствующем уровне иерархии ресурсов:
this.Resources.Clear();
this.Resources.Add(FindResource(templateKey));