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>
您不需要更改模型 类。您可以使用转换器来更改 HierarchicalDataTemplate
的 ItemsSource
。
转换器代码:
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>
...
目前我的树视图是这样的。
|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>
您不需要更改模型 类。您可以使用转换器来更改 HierarchicalDataTemplate
的 ItemsSource
。
转换器代码:
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>
...