WPF Treeview:跳过一个级别

WPF Treeview: Skip a Level

目前我的树视图是这样的。

|Department
|-Program
|--Curriculum
|---Bloc

我想跳过课程部分,让我的树视图看起来像这样。

|Department
|-Program
|--Bloc

这是我目前在 xaml 中的树视图。我怎样才能改变这个?我需要更换模型吗?

<TreeView ItemsSource="{Binding DepartmentList}">
                    <TreeView.ItemTemplate>
                        <HierarchicalDataTemplate ItemsSource="{Binding ProgramList}">
                            <TextBlock Text="{Binding Code}" />
                            <HierarchicalDataTemplate.ItemTemplate>
                                <HierarchicalDataTemplate ItemsSource="{Binding CurriculumList}">
                                    <TextBlock Text="{Binding Title}" />
                                    <HierarchicalDataTemplate.ItemTemplate>
                                        <HierarchicalDataTemplate ItemsSource="{Binding BlocList}">
                                            <TextBlock Text="{Binding YearImplemented}"/>
                                            <HierarchicalDataTemplate.ItemTemplate>
                                                <DataTemplate>
                                                    <TextBlock Text="{Binding Code}"/>
                                                </DataTemplate>
                                            </HierarchicalDataTemplate.ItemTemplate>
                                        </HierarchicalDataTemplate>
                                    </HierarchicalDataTemplate.ItemTemplate>
                                </HierarchicalDataTemplate>
                            </HierarchicalDataTemplate.ItemTemplate>
                        </HierarchicalDataTemplate>
                    </TreeView.ItemTemplate>
                </TreeView>

您不需要更改模型 类。您可以使用转换器来更改 HierarchicalDataTemplateItemsSource

转换器代码:

public class CurriculumItemsSourceConverter : IValueConverter
{   
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ObservableCollection<Curriculum> curriculumList = value as ObservableCollection<Curriculum>;
        return curriculumList.SelectMany(c => c.BlocList);
    }

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

TreeView代码:

<TreeView ItemsSource="{Binding DepartmentList}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding ProgramList}">
            <TextBlock Text="{Binding Code}" />
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding CurriculumList, Converter={StaticResource curriculumItemsSourceConverter}}">
                    <TextBlock Text="{Binding Title}" />
                    <HierarchicalDataTemplate.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Code}"/>
                        </DataTemplate>
                    </HierarchicalDataTemplate.ItemTemplate>
                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

其中 curriculumItemsSourceConverter 是转换器:

...
<Window.Resources>
    <local:CurriculumItemsSourceConverter x:Key="curriculumItemsSourceConverter" />
</Window.Resources>
...