private void buildTree(string p, IList <ReportDTO> res, ObservableCollection <TreeElementViewModel <ReportCommandVM> > tree) { res.Where(l => l.Path == p).ToList().ForEach(parentElement => { var x = new TreeElementViewModel <ReportCommandVM> { IsExpanded = false, Childs = new ObservableCollection <TreeElementViewModel <ReportCommandVM> >() }; if (parentElement.TypeName == "Report") { x.Data = new ReportCommandVM(parentElement.Description, new DelegateCommand( () => { controller.OpenReport(parentElement); } )); } else { x.Data = new ReportCommandVM(parentElement.Description, new DelegateCommand( () => { } ), true); } buildTree(p + parentElement.Name + "/", res, x.Childs); tree.Add(x); }); }