public ExtensionsTreeViewModelState(ExtensionsTreeViewModel treeViewModel) { foreach (var r in treeViewModel.Roots) { RegisterItem(r); } }
public void PopulateViewModel(ExtensionsTreeViewModel treeViewModel) { var extensions = _ecs.Extensions; var path = treeViewModel.SolutionPath; if (File.Exists(path)) { path = Path.GetDirectoryName(path); } var state = new ExtensionsTreeViewModelState(treeViewModel); var roots = new ObservableCollection <TreeItemViewModel>(); var projectsGroup = extensions.GroupBy(p => p.Project); var hierarchy = new Stack <string>(); foreach (var p in projectsGroup) { hierarchy.Push(Path.GetFileName(p.Key)); var pItem = new TreeItemViewModel() { Name = hierarchy.Peek(), IsExpanded = state.IsExpanded(hierarchy, projectsGroup.Count() == 1) }; var classesGroup = p.GroupBy(c => c.Class); foreach (var c in classesGroup) { hierarchy.Push(c.Key); var cItem = new TreeItemViewModel() { Name = hierarchy.Peek(), IsExpanded = state.IsExpanded(hierarchy, classesGroup.Count() == 1) }; foreach (var m in c) { hierarchy.Push(m.DisplayMethod); var mItem = new TreeItemViewModel() { Name = hierarchy.Peek(), ImageSource = _extensionIconResolver.Resolve(m.Icon), MouseDoubleClickCommand = _extensionMethodInvocationCommandViewModelFactory?.Invoke(m) }; cItem.Children.Add(mItem); hierarchy.Pop(); } pItem.Children.Add(cItem); hierarchy.Pop(); } roots.Add(pItem); hierarchy.Pop(); } treeViewModel.Roots = roots; }