C# 动态显示TreeViewItem子项
我有一个带有C# 动态显示TreeViewItem子项,c#,wpf,xaml,treeview,C#,Wpf,Xaml,Treeview,我有一个带有TreeView的WPF应用程序。我将文件和/或文件夹拖放到此TreeView。如果拖动的项目是一个文件夹(我已设置为检测),我将搜索该目录的顶层 我被困在TreeView上显示这些内部文件。我希望这些内部文件显示为文件夹项的子项 这是在TreeView中为项目建模的类: public class FileList { public enum FileType { File, Folder }; public FileType Type { get; set; }
TreeView
的WPF应用程序。我将文件和/或文件夹拖放到此TreeView
。如果拖动的项目是一个文件夹(我已设置为检测),我将搜索该目录的顶层
我被困在TreeView
上显示这些内部文件。我希望这些内部文件显示为文件夹项的子项
这是在TreeView中为项目建模的类:
public class FileList
{
public enum FileType { File, Folder };
public FileType Type { get; set; }
public string Name { get; set; }
private ObservableCollection<FileList> innerFiles;
public ObservableCollection<FileList> InnerFiles
{
get
{
return innerFiles;
}
set
{
innerFiles = value;
}
}
public FileList(string file)
{
Name = file;
Type = FolderOrFile(file);
}
}
我将FileList
对象的observeCollection
分配给treevieItem
的FileList
中的内部集合,然后刷新网格,但这些子项不会出现
我尝试了以下几点:
然而,我希望尽可能多地打开/搜索级别
非常感谢您的帮助。您需要告诉
HierarchycalDataTemplate
子项的源对象使用的是ItemsSource
属性。请尝试以下方法:
<HierarchicalDataTemplate ItemsSource="{Binding InnerFiles}">
<TextBlock Text="{Binding Name}"> <!-- DataTemplate for parent -->
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Name="mnuExpand" Header="Expand" Click="mnuExpand_Click" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate> <!-- DataTemplate for children -->
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
有关更多信息,请参阅MSDN上的。谢谢!这是一个很大的帮助。我现在可以显示子文件了。我现在唯一的问题是无法显示父对象的名称。我给每个最上面的项目上色,以确定它是文件还是文件夹,这是可见的,但我看不到名称文本。我无法使用
DisplayMemberPath
,因为ItemTemplate已设置。哦,是的,对不起,我好像把你的模板弄错了。我编辑了我的答案,看看这对你是否更好。太好了,谢谢。但是,我不知道datatemplate如何为父级工作,因为它在
中定义为datatemplate
。。。它扩展了DataTemplate
类。
<HierarchicalDataTemplate ItemsSource="{Binding InnerFiles}">
<TextBlock Text="{Binding Name}"> <!-- DataTemplate for parent -->
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Name="mnuExpand" Header="Expand" Click="mnuExpand_Click" />
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate> <!-- DataTemplate for children -->
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>