可以递归使用XAML ItemTemplate吗?

时间:2014-10-05 16:02:45

标签: templates winrt-xaml recurrence

我想知道这是否完全可能,我在视图上只得到部分结果,所以我怀疑......但也许有人对这个代码片段有所改进。

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;显示名字,但不是他们的下属,他们的下属等...

是否可以重复调用模板? 建议改进?

的问候,彼得

1 个答案:

答案 0 :(得分:2)

以下是我的工作:使用DataTemplateSelector

选择

public class MyDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate MyTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        return MyTemplate;
    }
}

的Xaml

<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}"/>

然后您可以在另一个ListViewContentControl中使用它(在设置ItemsSource / Content后):

<ListView ItemTemplateSelector="{StaticResource MyDataTemplateSelector}"/>

希望这有助于编码!