我有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
绑定?我一直在尝试一些不同的配置,但它们似乎没有起作用。
答案 0 :(得分:0)
我没有按照预期的方式工作,但最终以另一种方式绕过它。这对所有方法都不可扩展。我基本上创建了一个2深度的树。我正在寻找的是一种适用于任何深度树的方法,但找不到理想的方法。它可能需要一个自定义控件。但是,我确实有一个2深度树的答案。
使用ListView
,我按顶部节点对项目进行分组,然后将我的选择器用于GroupHeaderTemplateSelector
和ItemTemplateSelector
的模板。
我认为通过使每个级别成为一个组并且每个级别都由ListView
显示,无论它是否有项目,都可以将其扩展到N深度树。这可能是非常低效的,但可能适用于其他需要它的人。也可以使用Linq
以相当简单的方式构造树,所以至少有这样的。
答案 1 :(得分:0)
我遇到了同样的问题,并且到处寻找解决方案来解决这个问题。&#34; n&#34;深度树。我提出了一个解决方案,虽然我不是特别喜欢我的解决方案,但我最终将所有子列表都推到了我的主要级别。我保留了父母的参考资料,以便在他们有父母的情况下知道如何展示他们。
这样我就不需要&#34; MyDataTemplateSelector&#34;中的ItemsControl。只是一个想法,我想知道你的想法。