/// <summary> /// 菜单树映射 /// </summary> public static ICollection <LoginMenuInfo> ToTree(this IEnumerable <Menu> menus, Guid?parentId) { //验证 menus = menus == null ? new Menu[0] : menus.ToArray(); //声明容器 ICollection <LoginMenuInfo> loginMenuInfos = new HashSet <LoginMenuInfo>(); //判断父级菜单Id是否为null if (!parentId.HasValue) { //从根级开始遍历 foreach (Menu menu in menus.OrderBy(x => x.Sort).Where(x => x.IsRoot)) { LoginMenuInfo menuInfo = menu.ToNode(); loginMenuInfos.Add(menuInfo); menuInfo.SubMenuInfos = menus.ToTree(menuInfo.Id); } } else { //从给定Id向下遍历 foreach (Menu menu in menus.OrderBy(x => x.Sort).Where(x => x.ParentNode != null && x.ParentNode.Id == parentId.Value)) { LoginMenuInfo menuInfo = menu.ToNode(); loginMenuInfos.Add(menuInfo); menuInfo.SubMenuInfos = menus.ToTree(menuInfo.Id); } } return(loginMenuInfos); }
//Actions #region 导航至菜单 —— async void Navigate(LoginMenuInfo menu) /// <summary> /// 导航至菜单 /// </summary> /// <param name="menu">菜单</param> public async void Navigate(LoginMenuInfo menu) { if (!string.IsNullOrWhiteSpace(menu.Url)) { this.Busy(); Type type = Type.GetType(menu.Url); IScreen document = (IScreen)ResolveMediator.Resolve(type); document.DisplayName = menu.Name; await this.ActivateItem(document); this.ActiveDocument = document; this.Idle(); } }