我正在尝试使用 WPF 树视图实现非常具体的外观。
给定这样的结构:
H:
└── Programs
└── Startup
├── foo.txt
├── bar.txt
└── aaa
└── baz.txt
我想这样显示:
H:\Programs\Startup
├── foo.txt
├── bar.txt
└── aaa
└── baz.txt
就像 VSCode 一样:
我现在拥有的是
public class FSEntry
{
public string Name { get; set; }
public bool IsDirectory { get; set; }
public ObservableCollection<FSEntry> Children { get; set; }
}
和
<TreeView Name="myTreeView" ItemsSource="{Binding RootEntries}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:FSEntry}"
ItemsSource="{Binding Children, UpdateSourceTrigger=PropertyChanged}">
<TextBlock Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
如果我的目标是第一个表示,它就可以正常工作。如果我想实现统一代表,我该从哪里开始?
在我看来,你是通过望远镜的错误一端来看待这个问题的。
您实际上需要关注的是在数据中获取此特定结构(然后您可以将其用作 TreeView 控件的数据源)。
当您迭代文件夹结构时,如果一个文件夹恰好有一个子项目,并且该项目是另一个文件夹,那么您可以将文件夹名称组合成一个数据实体,否则只需照常添加子文件和文件夹。