0
나는 treeview로 작업하고 있으며 나무의 모든 레벨 (All Children)을 그룹화하는 다중 레벨 treeview를 원합니다.트리보기 다중 레벨 그룹 스타일
첫 번째 수준의 항목에서는 작동하지만 항목 아래에 하위 항목이있는 경우 그룹화 스타일이 적용되지 않는 것 같습니다.
내 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();
}
이런 일이 될 수있는 이유는 어떤 생각에 대한
컬렉션? 도움이 될 것입니다. 감사!
아직 행운 = – Miguel