我有一个ItemsControl
,其中包含每个都有自己DataTemplate
的项目。 ItemsSource中的每个ViewModel
类都派生自一个具有Header
属性的共同祖先。
我想将每个项目包装在Expander
控件中,但我的问题是我不知道如何将每个'DataTemplate''延续'到Expander的expading部分的DataContext。 / p>
在代码中,我的问题看起来像这样:
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}"/>
看起来像这样,令人惊讶,但可以理解:
alt text http://img514.imageshack.us/img514/6937/itemscontrol.png
我实际上期望自定义UserControls显示在展开的部分中......
答案 0 :(得分:4)
您应该设置DataContext
:
Content
<ContentPresenter Content="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}"/>
这将确保根据DataTemplate
的类型解决相应的Content
。