我有想要显示的具有不同属性的ListView,其中一些是列表本身。这些子列表将使用与父列表中的列表相同的DataTemplates (但缩进)。
有没有办法让子列表(虽然我使用的是ItemsControl,所以不用担心滚动)提示者引用定义它的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绑定完成的吗?我已经尝试了一些不同的配置,但它们似乎不起作用。
发布于 2014-03-03 04:48:42
我没有让它像预期的那样工作,但最终以另一种方式绕过了它。这并不是对所有方法都可扩展。我基本上已经创建了一个2深度的树。我正在寻找的是一种适用于任何深度树的方法,但找不到理想的方法。它可能需要一个自定义控件。然而,我确实有一个2深度树的答案。
使用ListView,我按顶部节点对项进行了分组,然后将选择器用于GroupHeaderTemplateSelector和ItemTemplateSelector的模板。
我认为可以将其扩展到N深度树,方法是使每个级别本身都是一个组,并且每个级别都由一个ListView显示,而不管它是否有项目。这可能是可怕的低效,但对于其他需要它的人来说,在紧要关头可能会起作用。使用Linq以一种相当简单的方式构建树也是可能的,所以至少是这样。
发布于 2014-06-30 23:36:56
我遇到了同样的问题,并且到处寻找"n“深度树的解决方案。我想出了一个解决方案,虽然我不是特别喜欢我的解决方案,但我最终将所有的子列表滚动到了我的主要级别。我保留了父母的引用,这样如果他们有父母,我就知道如何显示他们。
这样我就不需要"MyDataTemplateSelector“里面的ItemsControl了。只是一个想法,我想知道你是怎么想的。
https://stackoverflow.com/questions/22109373
复制相似问题