引用父DataTemplateSelector的DataTemplateSelector中的DataTemplate?

时间:2014-03-01 02:32:43

标签: c# xaml windows-runtime windows-store-apps winrt-xaml

我有ListView具有我想要显示的不同属性,其中一些属于列表本身。这些子列表将使用与父列表中相同的DataTemplates(但是缩进)。

有没有办法让子列表(虽然我使用的是ItemsControl,所以我不必担心滚动)presenter引用它正在定义的DataTemplateSelector?

如:

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

<selectors:MyDataTemplateSelector x:Key="MyDataTemplateSelector">
    <selectors:MyDataTemplateSelector.ListTemplate>
        <DataTemplate>
            <StackPanel>
                <!-- Referring to the selector it is being defined in -->
                <ItemsControl ItemTemplateSelector="{StaticResource MyDataTemplateSelector}"/>
            </StackPanel>
        </DataTemplate>
    </selectors:MyDataTemplateSelector.ListTemplate>
</selectors:MyDataTemplateSelector>

它编译得很好,但似乎在Windows.UI.Xaml中出现错误时加载崩溃。我认为这是因为它是一个循环引用。是否可能使用TemplatedParent绑定?我一直在尝试一些不同的配置,但它们似乎没有起作用。

2 个答案:

答案 0 :(得分:0)

我没有按照预期的方式工作,但最终以另一种方式绕过它。这对所有方法都不可扩展。我基本上创建了一个2深度的树。我正在寻找的是一种适用于任何深度树的方法,但找不到理想的方法。它可能需要一个自定义控件。但是,我确实有一个2深度树的答案。

使用ListView,我按顶部节点对项目进行分组,然后将我的选择器用于GroupHeaderTemplateSelectorItemTemplateSelector的模板。

我认为通过使每个级别成为一个组并且每个级别都由ListView显示,无论它是否有项目,都可以将其扩展到N深度树。这可能是非常低效的,但可能适用于其他需要它的人。也可以使用Linq以相当简单的方式构造树,所以至少有这样的。

答案 1 :(得分:0)

我遇到了同样的问题,并且到处寻找解决方案来解决这个问题。&#34; n&#34;深度树。我提出了一个解决方案,虽然我不是特别喜欢我的解决方案,但我最终将所有子列表都推到了我的主要级别。我保留了父母的参考资料,以便在他们有父母的情况下知道如何展示他们。

这样我就不需要&#34; MyDataTemplateSelector&#34;中的ItemsControl。只是一个想法,我想知道你的想法。