我想知道这是否完全可能,我在视图上只得到部分结果,所以我怀疑......但也许有人对这个代码片段有所改进。
View包含一个绑定到ItemsSource的ListView,它指向一个ItemTemplate,如下所示:
<ListView ItemsSource="{Binding MyData.SubOrdinates}" ItemTemplate="{StaticResource MyTemplate}"/>
数据源是人物对象的列表,其中一个人在顶层。每个人都包含一个属性&#34; SubOrdinates&#34;,当然除了最低级别的人。 subordinates属性是person对象的列表。显示数据的模板如下:
<DataTemplate x:Key="MyTemplate">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<ListView ItemsPanel="{Binding SubOrdinates}" ItemTemplate="{Binding MyTemplate}"/>
</StackPanel>
</DataTemplate>
我想很明显我正在寻找的东西:显示一个上级的名字,然后是他的下属名单。然后是下一个上级等等。
我得到的结果是,只有顶级上级&#39;显示名字,但不是他们的下属,他们的下属等...
是否可以重复调用模板? 建议改进?
的问候,彼得
答案 0 :(得分:2)
以下是我的工作:使用DataTemplateSelector
。
public class MyDataTemplateSelector : DataTemplateSelector
{
public DataTemplate MyTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
return MyTemplate;
}
}
<DataTemplate x:Key="MyTemplate">
<StackPanel>
<TextBlock Text="{Binding Name}"/>
<ListView ItemsPanel="{Binding SubOrdinates}" ItemTemplateSelector="{StaticResource MyDataTemplateSelector}"/>
</StackPanel>
</DataTemplate>
<namespace:MyDataTemplateSelector x:Key="MyDataTemplateSelector"
MyTemplate="{StaticResource MyTemplate}"/>
然后您可以在另一个ListView
或ContentControl
中使用它(在设置ItemsSource
/ Content
后):
<ListView ItemTemplateSelector="{StaticResource MyDataTemplateSelector}"/>
希望这有助于编码!