У меня есть ItemsControl
, который содержит элементы, каждый из которых имеет свои DataTemplate
. Каждый класс ViewModel
в ItemsSource происходит от общего предка, обладающего свойством Header
.
Я хочу обернуть каждый элемент в Expander
элементе управления, но моя проблема в том, что я не знаю, как «перенести» каждый «DataTemplate» в DataContext расширяющейся части Expander.
В коде моя проблема выглядит так:
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 в выделенном фрагменте кода (поскольку это просто для целей этого вопроса)
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;
}
}
XAML окна:
<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}"/>
Это выглядит удивительно, но понятно:
альтернативный текст http://img514.imageshack.us/img514/6937/itemscontrol.png
Я ожидаю, что пользовательские элементы управления UserControls будут отображаться в расширенных разделах ...