将CollectionViewSource多级组绑定到嵌套的HierarchicalDataTemplate

时间:2014-03-20 07:56:30

标签: c# wpf treeview collectionviewsource

只有第一级树节点在没有任何子节点的情况下可见,但我的CollectionViewSource具有至少包含一个项目的组。如何将子项的ItemSource绑定到每个组中的Items属性。

<HierarchicalDataTemplate x:Key="myTemplate" >
    <!-- Level 1 -->
    <WrapPanel>
        <CheckBox IsChecked="True" Margin="2,2,2,2" ></CheckBox>
        <TextBlock Text="{Binding Name}" Margin="2,2,2,2" ></TextBlock>
    </WrapPanel>
    <HierarchicalDataTemplate.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Items}">
            <!-- Level 2 -->
            <WrapPanel>
                <CheckBox IsChecked="True" Margin="2,2,2,2" ></CheckBox>
                <TextBlock Text="{Binding Name}" Margin="2,2,2,2" ></TextBlock>
            </WrapPanel>
            <DataTemplate>
                <WrapPanel>
                    <CheckBox IsChecked="{Binding IsChecked}" Margin="2,2,2,2" ></CheckBox>
                    <TextBlock Text="{Binding Name}" Margin="2,2,2,2" ></TextBlock>
                </WrapPanel>
            </DataTemplate>
        </HierarchicalDataTemplate>
    </HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>

<TreeView x:Name="TreeViewClaims" Grid.Row="1" Grid.Column="0" Margin="2,2,2,2" BorderThickness="0"
    ItemsSource="{Binding GroupByView.View.Groups}" 
    ItemTemplate="{StaticResource myTemplate}">
</TreeView>

1 个答案:

答案 0 :(得分:0)

如果所有项目都应以相同的方式显示,您只需指定一个HierachicalDataTemplate并设置ItemsSource(存储子项的属性)。

<HierarchicalDataTemplate x:Key="myTemplate"
                          ItemssSource="{Binding Items}"
                          TargetType="{x:Type FirstLevelViewModel}">
<WrapPanel>
    <CheckBox IsChecked="True" Margin="2,2,2,2" ></CheckBox>
    <TextBlock Text="{Binding Name}" Margin="2,2,2,2" ></TextBlock>
</WrapPanel>
</HierarchicalDataTemplate>

如果要为每个级别创建不同的视图,可以为每个级别实现不同的视图模型,并在HierachicalDataTemplate中使用TargetType属性。模板将自动应用于渲染视图模型。但你不能像在第一篇文章中那样使用HierachicalDataTemplate。