2014-12-15 2 views
0

나는 treeview로 작업하고 있으며 나무의 모든 레벨 (All Children)을 그룹화하는 다중 레벨 treeview를 원합니다.트리보기 다중 레벨 그룹 스타일

첫 번째 수준의 항목에서는 작동하지만 항목 아래에 하위 항목이있는 경우 그룹화 스타일이 적용되지 않는 것 같습니다.

First Group Showing up but the Items under the First Level arent being grouped.

내 XAML 그룹 스타일, HierarchicalDataTemplate, 트 리뷰

 <DataTemplate x:Key="basicGroupStyle"> 
      <!--Hide the whole grouping header if the group name is empty string--> 
      <DockPanel LastChildFill="True" > 
       <Border Background="RoyalBlue" 
         Margin="0" MinHeight="3" Width="5" 
         VerticalAlignment="Center" DockPanel.Dock="Left"/> 

       <TextBlock Text="{Binding Name}" 
          Foreground="Black" 
          FontSize="8pt" FontWeight="Bold" 
          VerticalAlignment="Center" 
          Margin="5 0 5 0" 
          DockPanel.Dock="Left"/> 
       <Border Background="RoyalBlue" 
         Margin="0" MinHeight="3" 
         VerticalAlignment="Center"/> 
      </DockPanel> 
     </DataTemplate> 

     <HierarchicalDataTemplate DataType="{x:Type explorer:TreeItem}" 
          ItemsSource="{Binding TreeViewItemsView}"> 
      <!--Hide the whole grouping header if the group name is empty string--> 
      <DockPanel LastChildFill="True" > 

       <TextBlock Text="{Binding Name}" 
          Foreground="Black" 
          FontSize="8pt" FontWeight="Bold" 
          VerticalAlignment="Center" 
          Margin="5 0 5 0" 
          DockPanel.Dock="Left"/> 
      </DockPanel> 
     </HierarchicalDataTemplate> 

    <TreeView ItemsSource="{Binding TreeViewItemsView}"> 
     <TreeView.GroupStyle> 
      <GroupStyle HeaderTemplate="{StaticResource basicGroupStyle}" /> 
     </TreeView.GroupStyle> 
    </TreeView> 

컨버터/그룹 설명

public class AssetTypeExplorerValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var v = value as int?; 
     if (v == null) 
      return value; 

     return Convert(v); 
    } 

    public static string Convert(int? assetData) 
    { 
     if (assetData.HasValue) 
     { 
      if (assetData == 1) 
       return "First Group"; 
      else if (assetData == 2) 
       return "Second Group"; 
      else if (assetData == 3) 
       return "Third Group"; 
      else 
       return "Damn"; 
     } 

     return string.Empty; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

TreeItem 클래스

public int level { get; set; } 

    public string Name { get; set; } 

    private ICollectionView _treeViewItemsView; 
    private ObservableCollection<TreeItem> _treeViewItems; 

    public ObservableCollection<TreeItem> TreeViewItems 
    { 
     get { return _treeViewItems ?? (TreeViewItems = new ObservableCollection<TreeItem>()); } 
     set { _treeViewItems = value; } 
    } 

    public ICollectionView TreeViewItemsView 
    { 
     get 
     { 
      if (_treeViewItemsView == null) 
      { 
       _treeViewItemsView = CollectionViewSource.GetDefaultView(TreeViewItems) as ListCollectionView; 
      } 

      return _treeViewItemsView; 
     } 
    } 

    private void Initalize() 
    { 
     (this.TreeViewItemsView as ListCollectionView).GroupDescriptions.Clear(); 
     (this.TreeViewItemsView as ListCollectionView).GroupDescriptions.Add(new PropertyGroupDescription("level", new AssetTypeExplorerValueConverter())); 

    } 
(Initalize 생성자 호출)를 TreeItems

private ICollectionView _treeViewItemsView; 
    private ObservableCollection<TreeItem> _treeViewItems; 
    public ICollectionView TreeViewItemsView 
    { 
     get 
     { 
      if (_treeViewItemsView == null) 
      { 
       _treeViewItemsView = CollectionViewSource.GetDefaultView(TreeViewItems) as ListCollectionView; 
      } 

      return _treeViewItemsView; 
     } 

    } 

    public ObservableCollection<TreeItem> TreeViewItems 
    { 
     get { return _treeViewItems ?? (TreeViewItems = new ObservableCollection<TreeItem>()); } 
     set { _treeViewItems = value; } 
    } 

    private void SetupItems() 
    { 
     var first = new TreeItem() { Name = "First Level First Item", level = 1 }; 
     var secLevel = new TreeItem() { Name = "Second Level First Item", level = 2 }; 
     first.TreeViewItems.Add(secLevel); 


     TreeViewItems.Add(first); 
     TreeViewItems.Add(new TreeItem() { Name = "Second Item", level = 1 }); 
     TreeViewItems.Add(new TreeItem() { Name = "Third Item", level = 1 }); 

    } 

    private void Initalize() 
    { 
     (this.TreeViewItemsView as ListCollectionView).GroupDescriptions.Clear(); 
     (this.TreeViewItemsView as ListCollectionView).GroupDescriptions.Add(new PropertyGroupDescription("level", new AssetTypeExplorerValueConverter())); 

     SetupItems(); 
    } 

이런 일이 될 수있는 이유는 어떤 생각에 대한

컬렉션? 도움이 될 것입니다. 감사!

답변

0

하나의 제안;

TreeView에 HierarchicalDatatemplate을 할당하십시오.

<HierarchicalDataTemplate x:Key="TestTemplate" .... HierarchicalDataTemplate> 

<TreeView ItemTemplate="{StaticResource TestTemplate}" ..... TreeView> 
+0

아직 행운 = – Miguel