/// <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);
        }
Example #2
0
        //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();
            }
        }