Вопрос

Я хочу связать TreeView к классу, как этот:

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(""));
}

Как я могу создать TreeView, который показывает файлы и коллекцию папок

Я хочу использовать что-то вроде этого:

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

Так что я получаю что-то так:

Корневая папка

|
|-File
|-File
|-Folder
  |-File
  |-File
  |-Folder
    |-File
Это было полезно?

Решение

Что именно ваш вопрос? Как их объединить? CompositeCollection.

Редактировать: Как уже упоминалось в комментариях, мой Intuipic. Приложение делает что-то очень похоже на то, что вы запрашиваете. Вот скриншот:

alt text

Другие советы

Это довольно легко, учитывая ваше созвездие.

Сначала: настройте свои классы. Вам не нужно два отдельных списка для файлов и папок в классе папок. Просто используйте один IList<Base_FileFolder> Внутри класса base_filefolder (хороший Ооп) и назовете его детьми!

Тогда вам понадобится только два шага:

  1. Две иерархическиедататематы

    <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 Name="TreeViewFileTree" ItemsSource="{rootFolder.Children}" />
    

Вот и все. Сила WPF - это его простота.

Вам нужно использовать, вам понадобится 3 вещи:

  1. Иерархикатататемеяная плата, как у вас, чтобы сделать родитель + дети и шаблон папки. Возможно, вы сможете использовать композиционную технику здесь, чтобы объединить папки + файлы, но я не уверен в том, что ... Возможно, вам придется добавить еще одно свойство в классе папок, который возвращает Union файлов и папок и вызовов его » Дети "или что-то еще ...
  2. DataTemplate для шаблонов файлов в дереве
  3. Темпленок, чтобы сказать дереву, чтобы переключаться между шаблонами в зависимости от элемента в дереве. Вместо того, чтобы установить itemTemplate на дереве, настройте ItemTemplateHelector к этому.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top