public FileTreeControlViewModel() { LoadedCommand = new DelegateCommand <RoutedEventArgs>(Loaded); TreeCollection.Add(new TreeViewModel { Name = "FolderA", IsNode = true, Nodes = new ObservableCollection <TreeViewModel> { new TreeViewModel { Name = "FileA.xml", IsNode = false }, new TreeViewModel { Name = "FileB.xml", IsNode = false } } }); var folderB = new TreeViewModel { Name = "FolderB", IsNode = true }; TreeCollection.Add(folderB); folderB.Nodes = new ObservableCollection <TreeViewModel> { new TreeViewModel { Name = "FolderA", IsNode = true, Parent = folderB }, new TreeViewModel { Name = "FolderB", IsNode = true, Parent = folderB }, new TreeViewModel { Name = "FileA.xml", IsNode = false, Parent = folderB, }, new TreeViewModel { Name = "FileB.xml", IsNode = false, Parent = folderB, } }; var folderB1 = ((ObservableCollection <TreeViewModel>)folderB.Nodes)[0]; folderB1.Nodes = new ObservableCollection <TreeViewModel> { new TreeViewModel { Name = "FileA.xml", IsNode = false, Parent = folderB1 }, new TreeViewModel { Name = "FileB.xml", IsNode = false, Parent = folderB1 } }; var folderB2 = ((ObservableCollection <TreeViewModel>)folderB.Nodes)[1]; folderB2.Nodes = new ObservableCollection <TreeViewModel> { new TreeViewModel { Name = "FileA.xml", IsNode = false, Parent = folderB2 }, new TreeViewModel { Name = "FileB.xml", IsNode = false, Parent = folderB2 } }; TreeCollection.AddRange(new List <TreeViewModel> { new TreeViewModel { Name = "FolderC", IsNode = true }, new TreeViewModel { Name = "FileA.xml", IsNode = false }, new TreeViewModel { Name = "FileB.xml", IsNode = false } }); }