Ich habe eine ItemsControl
die Elemente enthält, die jeweils eine eigene DataTemplate
. Jede ViewModel
Klasse in der ItemsSource leitet sich von einem gemeinsamen Vorfahren ab, der eine Header
Eigentum.
Ich möchte jedes Element in eine Expander
Steuerelement, aber mein Problem ist, dass ich nicht weiß, wie ich jedes "DataTemplate" in den DataContext des expandierenden Teils des Expanders übertragen kann.
Im Code sieht mein Problem folgendermaßen aus:
VieModels:
public class VM { public string Name { get; set; } }
public class VM1 : VM { public string Description { get; set; } }
public class VM2 : VM { public string Sakkie { get; set; } }
Items-Eigenschaft auf dem Code-Behind (weil es für den Zweck dieser Frage einfach ist)
public IEnumerable<VM> Items
{
get
{
yield return new VM1() { Name = "First VM1", Description = "First VM1 Description" };
yield return new VM2() { Name = "Vm2, nr2", Sakkie = "sakkie sakkie boeredans" } ;
yield break;
}
}
Die XAML des Fensters:
<Window.Resources>
<DataTemplate DataType="{x:Type local:VM1}">
<local:VM1UC />
</DataTemplate>
<DataTemplate DataType="{x:Type local:VM2}">
<local:VM2UC />
</DataTemplate>
<DataTemplate x:Key="DataTemplate1">
<Expander Header="{Binding Name}">
<ContentPresenter DataContext="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}"/>
</Expander>
</DataTemplate>
</Window.Resources>
<ItemsControl ItemsSource="{Binding Items}" Background="LightCoral" ItemTemplate="{DynamicResource DataTemplate1}"/>
Es sieht so aus, was zwar überraschend, aber verständlich ist:
Alt-Text http://img514.imageshack.us/img514/6937/itemscontrol.png
Ich erwarte eigentlich, dass die benutzerdefinierten UserControls in den erweiterten Abschnitten angezeigt werden...