Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HierarchycalDataTemplate:仅第一级子级_C#_.net_Xaml_Treeview_Hierarchicaldatatemplate - Fatal编程技术网

C# HierarchycalDataTemplate:仅第一级子级

C# HierarchycalDataTemplate:仅第一级子级,c#,.net,xaml,treeview,hierarchicaldatatemplate,C#,.net,Xaml,Treeview,Hierarchicaldatatemplate,我有一个项目的树状视图,它当前显示了所有级别的子项,最远也显示了所有级别的子项。我怎样才能做到只展现孩子的第一层次?也许,hierarchycaldatatemplate是错误的方法吗?折叠级别2的子级并进一步折叠是不够的。只需使用DataTemplate,而不是hierarchycaldatatemplate 编辑:明白了。有很多选择。上面汤米的推荐信很好,也很优雅。另一个选项是覆盖TreeViewItem的ControlTemplate,用于您不想看到其子项的任何项目,并隐藏扩展区域。如何使

我有一个项目的树状视图,它当前显示了所有级别的子项,最远也显示了所有级别的子项。我怎样才能做到只展现孩子的第一层次?也许,
hierarchycaldatatemplate
是错误的方法吗?折叠级别2的子级并进一步折叠是不够的。

只需使用
DataTemplate
,而不是
hierarchycaldatatemplate


编辑:明白了。有很多选择。上面汤米的推荐信很好,也很优雅。另一个选项是覆盖TreeViewItem的ControlTemplate,用于您不想看到其子项的任何项目,并隐藏扩展区域。

如何使用数据源的过滤版本,以便只包含您想要的级别,然后您可以毫无问题地使用HierarchicalDataTemplate。

,如果不操纵数据,就不可能只显示一个级别的子级。控件需要一个属性,该属性能够确定所显示节点的深度


这个解决方案对我来说非常明显:我只使用了两个平面树视图,第二个依赖于第一个平面树视图的
SelectedItem
。根本不需要
HierarchycalDataTemplate
。正如我所理解的,您只需要一个常见的
数据模板

,您需要顶级节点和这些节点的一级子节点,而不需要更多(因此总共将有两级节点)。然后,如果您想在XAML中使用,可以使用2个模板:

<Grid>
    <Grid.Resources>
        <DataTemplate x:Key="TemplateLeaf">
            <TextBlock Text="{Binding Text}" /> <!-- Whatever leaf view you want -->
        </DataTemplate>
        <sdk:HierarchicalDataTemplate ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateLeaf}" x:Key="TemplateNode">
            <TextBlock Text="{Binding Text}" />
        </sdk:HierarchicalDataTemplate>
    </Grid.Resources>
    <sdk:TreeView ItemsSource="{Binding Items}" ItemTemplate="{StaticResource TemplateNode}" />
</Grid>


(这是Silverlight版本,但它是相同的)。默认情况下,
HierarchycalDataTemplate
将自身用作自己的
ItemTemplate
,但如果需要,您可以将其替换为下一级别的其他模板(包括普通的
DataTemplate
)。

如果我没有充分解释我的问题,请原谅。有了
DataTemplate
我就有了一个简单的列表。不过,我希望每个节点都有第一级的子节点。我的数据源是这样一个类的集合:
public-MyClass{public-List-children{get;set;}}
。我只能通过操纵数据本身或阴影复制数据直到第一级子级来过滤它。不过,这将使实际的数据操作更加复杂。另一个解决方案如何?