2
我有一个ItemsControl
,其中包含每个都有自己的项目DataTemplate
。 ItemsSource中的每个ViewModel
类都来自具有Header
属性的共同祖先。WPF:如何将ItemsControl中的项目包装到另一个模板中?
我想包装每个项目在Expander
控制,但我的问题是,我不知道如何将每个'DataTemplate''继承'到扩展器的explobal部分的DataContext。
在代码中,我的问题是这样的:
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; } }
上的项目属性代码隐藏(因为它是简单的为这个问题的目的)
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
我其实希望自定义用户控件在扩展部分展现出来......
哇!完美解决方案,谢谢! (upvote两次按钮在哪里?) –