public MenuHierarchy GetHierachialModel() { if (getHierachialModel != null) return CloneModel(getHierachialModel); var list = GetBuildMenu(); var usedItems = new List<MenuItem>(); getHierachialModel = new MenuHierarchy(null); var selectedItem = GetSelectedMenuItem(); //create root elements foreach (var item in list) { if (selectedItem.Position == item.Position) item.Selected = true; //if (selectedItem.Href == item.Href) item.Selected = true; if (!item.Position.Contains(SEPARATOR)) { getHierachialModel.Children.Add(new MenuHierarchy(item)); usedItems.Add(item); } } foreach (var item in getHierachialModel.Children) { var childUsedItems = CreateChildren(item, list); usedItems.AddRange(childUsedItems); } foreach (var item in list.Except(usedItems).ToList()) { getHierachialModel.Children.Add(new MenuHierarchy(item)); usedItems.Add(item); } //set order SetOrder(getHierachialModel.Children, 0); return CloneModel(getHierachialModel); }
private MenuHierarchy CloneModel(MenuHierarchy hierachialModel) { var mh = _classMappingService.MapObject<MenuHierarchy>(hierachialModel); mh.Children = new List<MenuHierarchy>(); mh.Children.AddRange(hierachialModel.Children.Select(CloneModel)); return mh; }
private static IEnumerable<MenuItem> CreateChildren(MenuHierarchy hitem, IEnumerable<MenuItem> list) { var usedItems = new List<MenuItem>(); var startStr = hitem.Item.Position + SEPARATOR; foreach (var item in list) { if (item.Position.StartsWith(startStr) && item.Position.LastIndexOf(SEPARATOR) == startStr.Length - 1) { hitem.Children.Add(new MenuHierarchy(item) { Level = hitem.Level+1}); usedItems.Add(item); } } foreach (var item in hitem.Children) usedItems.AddRange(CreateChildren(item, list)); return usedItems; }