生成带有对象列表的树视图
Generate A treeview with a list of objects
我用的两个类如下
public class FoundDirectory
{
public string fullPath { get; set; }
public string parent { get; set; }
public string directoryName { get; set; }
public ObservableCollection<FoundDirectory> subDirectories { get; set; }
public ObservableCollection<FoundFile> subFiles { get; set; }
public override string ToString()
{
return directoryName;
}
}
public class FoundFile
{
public string fileName { get; set; }
public string fullPath { get; set; }
public long fileLength { get; set; }
public override string ToString()
{
return fileName;
}
}
我正在尝试通过递归硬盘驱动器扫描生成 TreeView。我将 ObservableCollection 传递给 TreeView。我可以让它显示正确嵌套的子目录,但根本无法让它显示子文件。我的XAML如下:
<TreeView Name="directoryTree" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Path=sortedDirList}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=subDirectories}">
<StackPanel>
<TextBlock Text="{Binding Path=directoryName}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我尝试了多种不同的方式来显示子文件,但似乎没有任何效果
您可以通过以下方式解决此问题:
public class Node
{
public string FullPath { get; set; }
public string Name { get; set;}
public int Size {get;set;}
public ObservableCollection<Node> Children {get; set;}
public string ToString()
{
return Name;
}
}
Xaml:
<TreeView Name="directoryTree" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Path=sortedDirList}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
然后将 sortedDirList 设为仅包含根目录的列表,它应该会正确展开。
注意:class/variable 名称只是占位符,您可以随意重命名它们。
要递归地填充树,写这样的东西应该可行:
public void DirectorySearch(Node node)
{
foreach(string f in Directory.GetFiles(node.Name))
{
//initialize a node with the file info
node.Children.Add(fileNode);
}
foreach(var d in Directory.GetDirectories(node.Name)
{
//initialize a node with directory info
node.Children.Add(dirNode);
DirectorySearch(dirNode);
}
}
我用的两个类如下
public class FoundDirectory
{
public string fullPath { get; set; }
public string parent { get; set; }
public string directoryName { get; set; }
public ObservableCollection<FoundDirectory> subDirectories { get; set; }
public ObservableCollection<FoundFile> subFiles { get; set; }
public override string ToString()
{
return directoryName;
}
}
public class FoundFile
{
public string fileName { get; set; }
public string fullPath { get; set; }
public long fileLength { get; set; }
public override string ToString()
{
return fileName;
}
}
我正在尝试通过递归硬盘驱动器扫描生成 TreeView。我将 ObservableCollection 传递给 TreeView。我可以让它显示正确嵌套的子目录,但根本无法让它显示子文件。我的XAML如下:
<TreeView Name="directoryTree" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Path=sortedDirList}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=subDirectories}">
<StackPanel>
<TextBlock Text="{Binding Path=directoryName}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
我尝试了多种不同的方式来显示子文件,但似乎没有任何效果
您可以通过以下方式解决此问题:
public class Node
{
public string FullPath { get; set; }
public string Name { get; set;}
public int Size {get;set;}
public ObservableCollection<Node> Children {get; set;}
public string ToString()
{
return Name;
}
}
Xaml:
<TreeView Name="directoryTree" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding Path=sortedDirList}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
<StackPanel>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
然后将 sortedDirList 设为仅包含根目录的列表,它应该会正确展开。
注意:class/variable 名称只是占位符,您可以随意重命名它们。
要递归地填充树,写这样的东西应该可行:
public void DirectorySearch(Node node)
{
foreach(string f in Directory.GetFiles(node.Name))
{
//initialize a node with the file info
node.Children.Add(fileNode);
}
foreach(var d in Directory.GetDirectories(node.Name)
{
//initialize a node with directory info
node.Children.Add(dirNode);
DirectorySearch(dirNode);
}
}