2012-12-30 3 views
0

GUI 용 권한 프레임 워크를 작성 중입니다. 사용자는 유효한 자격 증명으로 로그인하고 사용자가 액세스 할 수있는 메뉴 옵션 (버튼)이 제공됩니다.프로그래밍 방식으로 버튼 객체 매개 변수 참조하기

사용자에게 할당 된 권한에 따라 버튼 공개 여부를 표시하거나 숨길 계획입니다.

프로그래밍 방식으로 버튼 가시성을 참조하고 전환하는 가장 좋은 방법을 생각하는 데 어려움을 겪고 있습니다. 어떤 메뉴 항목을 표시해야하는지에 대해 자세히 설명하는 목록이 있지만 양식의 단추에 대해 해당 목록을 참조하는 방법을 알지 못합니다.

각 버튼 객체의 이름을 쉽게 입력하고 목록에 대해 테스트하고 버튼의 가시성을 전환 할 수는 있지만 이는 나에게별로 효율적이지 않습니다.

아래 코드. 버튼 항목을 활성화/비활성화하는 가장 좋은 방법은 무엇입니까?

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; 
        }     
       } 



      } 
} 
+0

이 포스팅은 아마 어떤 컨테이너 당신이 버튼을 추가하는 코드 검토 – MethodMan

+0

더 적합? 'Visibility' 로직을 처리하기 위해'Button'을 기반으로하는'Menu' 객체를위한'DataTemplate'을 만들 수 있습니다. –

답변

0

당신은 다음을 반복, 다음 목록은 그에게 당신의 버튼을 할당 작성, 아마, 당신의 버튼에 인덱스를 할당 할 Tag 속성을 사용하는 것이 어떻게 든 메뉴에 각 버튼을 연결해야하는거야 그것을 보이게 만들지 결정하기 위해. Buttons 인덱스를 메뉴 항목의 속성과 연결해야합니다 (MenuButton이라는 이름의 List에서 예제로 Tag를 사용했습니다).

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;} 
    } 
} 
+0

분명히 여기에 뭔가 빠져 있습니다. 내 양식의 기존 단추를 목록에 어떻게 지정합니까? 내가하려는 모든 시도는 기존 단추를 참조 할 수있는 기능이 없어도 목록에 새 단추 개체를 만듭니다. – Damo

+0

@Damo 목록에 클래스 범위 변수가 있어야합니다. 목록에 단추를 추가하거나 수동으로 하나씩 추가하려면 foreach 루프를 사용해야합니다. 목록에 있으면 해당 목록을 사용중인 버튼이 계속 표시됩니다. –

+0

죄송합니다. 그냥 알아 냈습니다. 버튼 이름을 직접 참조하는 대신 내 목록에 새 키워드를 사용하고있었습니다. 지금 큰 작품, 덕분에 – Damo

관련 문제