WPF MVVM应用:动态加载菜单项

<Menu x:Name="MainMenu" ItemsSource="{Binding MenuItems}" ></Menu>
  • ViewModel

using Prism.Mvvm;
using SqlHelp;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Windows.Controls;

namespace WPFSale.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {

        private ObservableCollection<MenuItem> menus;

        public ObservableCollection<MenuItem> MenuItems
        {
            get { return menus; }
            set { SetProperty(ref menus, value); }
        }


        public MainWindowViewModel()
        {
          LoadMenus();
        }

        private void LoadMenus()
        {
           
            //读取菜单数据库数据
            DataTable dataTable = Database.ExecSqlReturnDataTable("select * from Fun  order by OrderID asc");

            //加载1级菜单  FunID/   ClassName窗口名称
            var FirstRows = from p in dataTable.AsEnumerable() where p.Field<string>("PFunID") == "0" select p;
            List<MenuItem> Menu1Items = new List<MenuItem>();

            foreach (var r in FirstRows)
            {
                MenuItem menuItem = new MenuItem();
                menuItem.Name = "M" + r["FunID"].ToString() + "_" + r["ClassName"].ToString();
                menuItem.RenderSize = new System.Windows.Size(130, 0x16);
                menuItem.Header = r["FunName"].ToString();

                AddChildMenu(menuItem, r["FunID"].ToString(), dataTable);//增加子菜单项
                Menu1Items.Add(menuItem);
            }

            MenuItems=new ObservableCollection<MenuItem>( Menu1Items);

        }

        private  void AddChildMenu(MenuItem item,string sfunID,DataTable dataTable)
        {
            var rs = from p in dataTable.AsEnumerable()
                     where p.Field<string>("PFunID") == sfunID     select p;
            foreach (var r in rs)
            {
                if (r.Field<string>("FunName") != "-")
                {
                    MenuItem subItem = new MenuItem
                    {
                        Name = "M_" + r["FunID"].ToString() + "_" + r["ClassName"].ToString(),
                        RenderSize = new System.Windows.Size(130, 0x16),
                        Header = r["FunName"].ToString()
                    };
                    item.Items.Add(subItem);
                        AddChildMenu(subItem, r["FunID"].ToString(), dataTable);

                }
                else
                {
                    Separator separator = new Separator { Name = "M_" + r.Field<int>("FunID").ToString() };
                    item.Items.Add(separator);
                }
            }
        }
    }
}

 效果

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值