Если я правильно понимаю ваш вопрос, вам нужна реализация DataTemplateSelector и набор ресурсов DataTemplate в соответствии с типами свойств, которые вы хотите отобразить.
Что-то в этих строках:
public class TemplateSelector:DataTemplateSelector
{
public override DataTemplate SelectTemplate
(object item,DependencyObject container)
{
var element = container as FrameworkElement;
if(element is ClassA)
return element.FindResource("classATemplate") as DataTemplate;
if(element is ClassB)
return element.FindResource("classBTemplate") as DataTemplate;
return null;
}
}
Где ClassA и ClassB - ваши пользовательские типы.
Для индекса чередования вы можете создать стиль для этих строк
<Style.Triggers>
<Trigger Property="ItemsControl.AlternationIndex" Value="0">
<Setter Property="Background" Value="LightBlue"></Setter>
</Trigger>
<Trigger Property="ItemsControl.AlternationIndex" Value="1">
<Setter Property="Background" Value="LightGreen"></Setter>
</Trigger>
</Style.Triggers>