Теперь вопросы немного прояснены, вот еще одна попытка.
Прежде всего, графики, вероятно, лучше обрабатываются с помощью элемента управления WPF Charting в WPF Toolkit, они содержат довольно сочные вещи. Я определенно рекомендую попробовать его перед созданием пользовательских диаграмм на основе ListView.
Но в любом случае, возвращаясь к вашим уточненным вопросам. Вот где вы должны использовать либо DataTemplateSelector, либо запускать с помощью пользовательского IValueConverter, который устанавливает шаблон.
DataTemplateSelector был изобретен именно по этой причине, но на практике это немного грязно. Вам придется иметь дело с загрузкой шаблонов из ресурсов, которые немного лучше, чем XamlReader.
С IValueConverter это будет примерно так:
<DataTemplate>
<ContentControl x:Name="content" Content="{Binding}">
</ContentControl>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Converter={local:TemplateChoseConverter}}" Value="SystemType">
<Setter TargetName="content" Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="[system type] "/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Converter={local:TemplateChoseConverter}}" Value="Action">
<Setter TargetName="content" Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Button Text="[action] "/>
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
Здесь вы помещаете ContentControl в DataTemplate, а триггеры внутри DataTemplate меняют внутренний вложенный шаблон на основе вещей, рассчитанных в IValueConverter.
Таким образом, вы никогда не имеете дело с XAML, даже при выборе шаблона ValueConverter получаются только строки, которые затем обрабатываются триггерами.