6

我想将树视图绑定到这样的类:

public class Folder : Base_FileFolder
{
    public Folder()
    {
        Folders = new ObservableCollection<Folder>();
        Files = new ObservableCollection<File>();
    }
    public ObservableCollection<Folder> Folders { get; set; }
    public ObservableCollection<File> Files { get; set; }
}

其他类是:

public class File : Base_FileFolder
{
}

public class Base_FileFolder : DependencyObject
{
    public string Name
    {
        get { return (string)GetValue(NameProperty); }
        set { SetValue(NameProperty, value); }
    }
    public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Base_FileFolder), new UIPropertyMetadata(""));
}

如何创建显示文件和文件夹集合的树视图

我想使用这样的东西:

 <HierarchicalDataTemplate
 DataType="{x:Type model:Folder}"
 ItemsSource="{Binding Childs}">   
 <DockPanel>
       <Label Content="{Binding Name}"/>    </DockPanel>
 </HierarchicalDataTemplate>

所以我得到这样的东西:

根文件夹

|
|-File
|-File
|-Folder
  |-File
  |-File
  |-Folder
    |-File
4

3 回答 3

2

你的问题到底是什么?如何将它们结合起来?CompositeCollection.

编辑:正如评论中提到的,我的Intuipic应用程序所做的事情与您所要求的非常相似。这是一个屏幕截图:

替代文字

于 2010-08-20T17:45:09.193 回答
1

考虑到你的星座,这很容易。

第一:调整你的课程。您不需要文件夹类中的文件和文件夹的两个单独的列表。只需IList<Base_FileFolder>在 Base_FileFolder 类中使用一个(良好的 OOP)并将其称为 Children!

然后,您只需要再执行两个步骤:

  1. 两个 HierarchicalDataTemplates

    <HierarchicalDataTemplate DataType="{x:Type FolderNode}"  ItemsSource="{Binding Path=Children}">
        <Grid>
            <TextBlock Text="{Binding FolderName}" />
        </Grid>
    </HierarchicalDataTemplate>
    
    <HierarchicalDataTemplate DataType="{x:Type FileNode}"  ItemsSource="{Binding Path=Children}">
        <Grid>
            <TextBlock Text="{Binding FileName}" />
        </Grid>
    </HierarchicalDataTemplate>
    
  2. 像这样的 TreeView

    <TreeView Name="TreeViewFileTree" ItemsSource="{rootFolder.Children}" />
    

而已。WPF 的优势在于它的简单性。

于 2010-09-06T12:21:11.397 回答
0

你需要使用你需要三样东西:

  1. 一个 HierarchicalDataTemplate,就像你有的那样,做父母+孩子,并对文件夹进行模板化。您可能可以在此处使用 CompositeCollection 来合并文件夹+文件,但我不确定...您可能必须向您的文件夹类添加另一个属性,该属性返回文件和文件夹的联合并调用它“孩子们”什么的...
  2. 一个 DataTemplate 到树中的模板文件
  3. 一个 TemplateSelector 告诉树根据树中的项目在模板之间切换。不要在树上设置 ItemTemplate,而是将 ItemTemplateSelector 设置为此。
于 2010-08-20T22:46:11.253 回答