以编程方式引用按钮对象参数

时间:2012-12-30 22:58:36

标签: c# wpf

我正在为GUI编写授权框架。用户使用有效凭据登录,并显示用户有权访问的菜单选项(按钮)。

我计划根据分配给用户的权限显示或隐藏按钮可见性。

我正在努力想出以编程方式引用和切换按钮可见性的最佳方法。我有一个List,详细说明哪些菜单项应该可见,但我不知道如何根据表单上的按钮引用该列表。

我可以轻松输入每个按钮对象的名称并对列表进行测试并切换按钮的可见性,但这对我来说似乎不是很有效。

以下代码。如何才能最好地启用/禁用按钮项?

class Menu
{
    public int Id { get; set; }
    public string MenuItemFriendlyName { get; set; }
    public string ButtonName { get; set; }
    public bool Visable { get; set; }

    public List<Menu> CalculateMenuAccessForUser(User userDetails)
    {
        var menuItems = AllMenuItemsInSystem();

        foreach (var pt in userDetails.PermissionTable)
        {
            if(pt.Type != "Menu")
                break;

            if (menuItems.Exists(x => x.Id.Equals(pt.Id)))
            {
                var index = menuItems.FindIndex(y => y.Id.Equals(pt.Id));

                menuItems[index].Visable = true;
            }
        }

        return menuItems;
    }

    private List<Menu> AllMenuItemsInSystem()
    {
        var menu = new List<Menu>();

        using (var sqlconnection = new SqlConnection(Globals.AFWideSettings.SqlConnectionString))
        {
            sqlconnection.Open();
            using (
                var sqlcommand =
                    new SqlCommand("select name, permissionid from PermissionListTable where type = 'Menu'",
                                   sqlconnection))
            {
                var resultReader = sqlcommand.ExecuteReader();

                while (resultReader.Read())
                {
                    menu.Add(new Menu(){MenuItemFriendlyName = resultReader.GetString(0), Id = resultReader.GetInt32(1), Visable = false});
                }
            }
        }

        return menu;
    }
}

class Another{

    void BuildOutlookMenu()
    {
        var buildMenu = new Authentication.Menu();
        var menuBuilder = buildMenu.CalculateMenuAccessForUser(_userDetails);

        foreach (var menu in menuBuilder)
        {
            if (menu.Visable)
            {
                //Here I wish to enable or disable my menu buttons
                //BUTTON.Visibility = Visibility.Visible;
            }                
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你需要以某种方式将每个按钮与你的菜单相关联,我可能会使用Tag属性为你的按钮分配一个索引,然后创建一个List,将你的按钮分配给它,然后迭代它确定是否可见。您需要将Buttons索引与Menu Item上的属性相关联(我使用Tag作为示例,将List命名为MenuButtons)。

foreach (var menu in menuBuilder)
{
    if (menu.Visible)
    {
        Button result =  menuButtons.Find(btn => { return (int)btn.Tag == (int)menu.Tag;});
        if(result != null){result.Visibility=Visibility.Visible;}
    }
}