0

I'm trying to populate a treeview from a list of objects with child objects. I can't help but feel like i'm close but something is missing. I want to be able to feed it this list of objects to populate the treeview accordingly with the same structure of children.

foreach (var folder in folders)
{
    TreeViewItem item = new TreeViewItem();
    item.Header = folder.Name;
    Populate(folder, item);
    //trvstructure is the xaml treeview
    trvStructure.Items.Add(item);
}

void Populate(Folder folder, TreeViewItem treeViewItem)
{
    TreeViewItem trView = new();
    trView.Header = folder.Name;
    treeViewItem.Items.Add(trView);

    foreach (var item in folder.Folders)
    {
        treeViewItem.Items.Add(item.Name);
        Populate(item, trView);
    }
}

I have a list of these classes each containing child elements to show subfolders

public class Folder
{
    public string Name { get; set; }
    public List<Folder> Folders { get; set; } = new List<Folder>();
}

Expected output

-A
 -B
  -C
-B
 -C
  -D

Here's the output i'm getting

My output

All help is appreciated :D

Baxorr
  • 298
  • 6
  • 20
  • Does this answer your question? [populate treeview from list of file paths in wpf](https://stackoverflow.com/questions/6415037/populate-treeview-from-list-of-file-paths-in-wpf) – quaabaam Mar 26 '21 at 19:17

1 Answers1

0

In my case I have the topfolder seperately from my object list so I was able to achieve what I wanted like this.

        TreeViewItem item = new TreeViewItem();
        item.Header = topFolder;
        foreach (var folder in folders)
        {

            //item.Header = folder.Name;
            Populate(folder, item);

        }
        trvStructure.Items.Add(item);

    void Populate(Folder folder, TreeViewItem treeViewItem)
    {
        TreeViewItem trView = new();
        trView.Header = folder.Name;
        treeViewItem.Items.Add(trView);

        foreach (var item in folder.Folders)
        {
            Populate(item, trView);
        }
    }
Baxorr
  • 298
  • 6
  • 20