TreeView与分组

时间:2014-04-22 12:31:00

标签: wpf treeview grouping

我需要在TreeView中为组创建重叠

类似的事情:

enter image description here

在我的ItemsSource节点1中,节点1.1和节点2组合在一起 节点3和节点3.1组合在一起

将CollectionView与PropertyGroupDesciptor一起使用。

现在我不想在每个小组周围添加橙色矩形

到目前为止,我的尝试是使用GroupStyle但是这导致2个Orange GroupItems具有分组属性的值,我需要的是为GroupBox设置样式

任何想法?

我的代码(这部分似乎与我无关,因为它只是我的分组逻辑,但如果对于某些人来说理解我喜欢把它放在这里的内容很重要的话):

CS:

公共类MyNode    {         public int GroupProperty         {             获得;设置;         }

    public string Title
    {
        get;set; 
    }

    public List<MyNode> Children
    {
       get;
       set;
    }

}

在ViewModel中:

 public List<MyNode> MyItemsSource
 {
     get
     {
          return new List<MyNode>
          {
               List<MyNode> nodes = new :ist<MyNode>();

               MyNode node1 = new MyNode{ Title = "Node1" ,GroupProperty = 1 }
               node1.Children.Add(new MyNode{ Title = "Node 1.1" , GroupProperty = 1});

               nodes.Add(node1)
               MyNode node2 = new MyNode{ Title = "Node1" ,GroupProperty = 2 }

               nodes.Add(node2)              

               ... same goes for Node 3 and Node 3.1 

               return nodes;
          };

     }

  }

XAML:

资源:

    <DataTemplate x:Key="protocolTemplate" DataType="{x:Type local:MyNode}">
        <TextBlock Text="{Binding Title}" />
    </DataTemplate>

    <HierarchicalDataTemplate x:Key="rootTemplate" DataType="{x:Type local:MyNode}" 
                              ItemTemplate="{StaticResource protocolTemplate}" ItemsSource="{Binding SubProtocols}">
        <TextBlock Text="{Binding Title}" />
    </HierarchicalDataTemplate>


    <CollectionViewSource x:Key="protocols" Source="{Binding Protocols}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="GroupProperty" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource> 

查看:

    <TreeView  ItemTemplate="{StaticResource rootTemplate}" ItemsSource="{Binding Source={StaticResource protocols}}" />

O&#39;我添加了Groups my ItemsSource的代码,如何创建GroupStyle,它会在分组的项目上放置一种叠加?

1 个答案:

答案 0 :(得分:0)

我找到了答案,我只需要在GroupStyle中做 在我的GroupItem样式中放置了一个ItemsPresenter,如下所示:

 <TreeView.GroupStyle>  
            <GroupStyle>                                        
                <GroupStyle.ContainerStyle>
                    <Style TargetType="GroupItem">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="GroupItem">
                                    <Grid>
                                        <Rectangle Fill="Orange"/>
                                        <ItemsPresenter />                                      
                                    </Grid>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </TreeView.GroupStyle>