2010-08-20 13 views
6

Quiero enlazar una vista de árbol a una clase como esta:vista de árbol de unión múltiple en WPF

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; } 
} 

los otros ares clases:

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

¿Cómo puedo crear una vista de árbol que muestra los archivos y carpetas colección

quiero usar algo como esto:

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

por lo que obtener somethign así:

RootFolder

| 
|-File 
|-File 
|-Folder 
    |-File 
    |-File 
    |-Folder 
    |-File 
+1

Este es el mismo problema exacto con el que me encontré cuando quería llenar una vista de árbol con cada atributo de cada elemento en un XDocument, podía iterar sobre los atributos de un elemento o todos los elementos, pero iterando todos los elementos y todos los atributos de cada elemento me lanzaron a un bucle ... No recuerdo lo que hice, pero desperdiciaba mucho tiempo. –

Respuesta

2

¿Cuál es exactamente su pregunta? Cómo combinarlos? CompositeCollection.

EDITAR: como mencioné en los comentarios, mi aplicación Intuipic hace algo muy similar a lo que está solicitando. Aquí hay una captura de pantalla:

alt text

+0

Léelo de nuevo, por favor añado un texto thx – Delta

+0

Intuipic (http://intuipic.codeplex.com/) es un proyecto que escribí hace un tiempo que hace esto. Quizás quieras revisarlo. –

+0

@KenBoogaart, ¿de verdad? "Intuipic es un visor de imágenes fácil de usar. Tiene el objetivo de ser intuitivo y funcional al mismo tiempo". Eso no suena como si fuera algo parecido a la pregunta. –

0

Es necesario utilizar Tendrá 3 cosas:

  1. un HierarchicalDataTemplate, como que tiene, hacer los padres + hijos, y la plantilla de las carpetas. PODRÍAS poder usar una CompositeCollection aquí para combinar las carpetas + archivos, pero no estoy seguro de eso ... es posible que debas agregar otra propiedad a tu clase de carpeta que devuelve la unión de archivos y carpetas y llamarla " Niños "o lo que sea ...
  2. Un DataTemplate a los archivos de plantilla en el árbol
  3. Un TemplateSelector para indicarle al árbol que cambie entre las plantillas según el elemento del árbol. En lugar de establecer un ItemTemplate en el árbol, establezca ItemTemplateSelector en esto.
1

Esto es bastante fácil, teniendo en cuenta su constelación.

Primero: Ajuste sus clases. No necesita dos Listas separadas para archivos y carpetas en la clase de carpetas. Solo use un IList<Base_FileFolder> dentro de la clase Base_FileFolder (buen OOP) y llámelo Children!

entonces usted tendrá sólo dos pasos más:

  1. Dos 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. y una TreeView como esto

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

Eso es todo. La fuerza de WPF es su simplicidad.

Cuestiones relacionadas