2011-09-23 4 views
1

WPF (C# .net)에서 채팅 용 응용 프로그램을 만들고 있습니다. 다음 속성을 가진 클래스 사용자를 만들었습니다. 1. 회사 이름 2. 지점 3. 디자인 4. 사용자 이름 클래스 사용자의 개체 목록을 가져 오는 중입니다. 나는 트 리뷰에서 사용자를 표시하려면 같은 :개체 그룹화와 함께 WPF의 트리 뷰용 뷰 모델 만들기

회사 이름 1 -Branch1 - : 지정 제품 * 사용자 이름 1 * 사용자 NAME2 -Branch2 - : 지정 제품 * 사용자 NAME3 - : Designation2 * 사용자 이름 4

사용자 목록을 새로 고침하면 트리 구조가 다시로드됩니다. 동일한 상위를 가진 사용자를 고려하여이 트리 구조를 만들고 싶습니다. 새 사용자가 로그인 할 때 런타임에 사용자 목록을 얻고 있습니다. 그런 트리를 만드는 방법은 무엇입니까? "ViewModel을 사용하여 트리 뷰를 만들고 WPF 창에 표시하는 방법"을 알고 싶습니다. "

답변

1

당신의 질문이 모든 속성을 그룹화하여 사용자 목록에서 계층 구조를 만드는 방법에 관한 것 같아요.

그 목적으로 linq의 그룹화 기능을 사용할 수 있습니다.

 var users = new[] { 
      new { 
       CompanyName = "c1", 
       Branch = "b1", 
       Destination = "d1", 
       UserName= "u1", 
      },    new { 
       CompanyName = "c1", 
       Branch = "b1", 
       Destination = "d1", 
       UserName= "u1", 
      },    new { 
       CompanyName = "c1", 
       Branch = "b1", 
       Destination = "d1", 
       UserName= "u1", 
      },    new { 
       CompanyName = "c2", 
       Branch = "b1", 
       Destination = "d2", 
       UserName= "u2", 
      }, 
     }; 

     var data = from u in users 
        group u by u.CompanyName into ug 
        select new { Node = ug.Key, Childs = ug }; 


     foreach (var i in data) 
     { 
      Console.WriteLine(i.Node); 
      foreach (var node in i.Childs) 
      { 
       Console.WriteLine("\t" + node.UserName); 
      } 
     } 

을 그리고 이것은 중첩 된 그룹에 코드입니다 : 다음은 첫 번째 수준에 대한 샘플입니다, 당신은 계층 구조를 만들 수 자체를 반복 할 수있다

 var users = new[] { 
      new { 
       CompanyName = "c1", 
       Branch = "b3", 
       Destination = "d1", 
       UserName= "u1", 
      },    new { 
       CompanyName = "c1", 
       Branch = "b1", 
       Destination = "d1", 
       UserName= "u1", 
      },    new { 
       CompanyName = "c1", 
       Branch = "b1", 
       Destination = "d1", 
       UserName= "u1", 
      },    new { 
       CompanyName = "c2", 
       Branch = "b1", 
       Destination = "d2", 
       UserName= "u2", 
      }, 
     }; 

     var data = from u1 in users 
        group u1 by u1.CompanyName into gByCompanyName 
        select new 
        { 
         Node = gByCompanyName.Key, 
         Childs = from u2 in gByCompanyName 
           group u2 by u2.Branch into gByBranch 
           select new 
           { 
            Node = gByBranch.Key, 
            Childs = from u3 in gByBranch 
              group u3 by u3.Destination into gByDestination 
              select new 
              { 
               Node = gByDestination.Key, 
               Childs = from u4 in gByDestination 
                  select new { Node = u4.UserName } 
              } 
           } 
        }; 



     foreach (var n1 in data) 
     { 
      Console.WriteLine(n1.Node); 
      foreach (var n2 in n1.Childs) 
      { 
       Console.WriteLine("\t" + n2.Node); 

       foreach (var n3 in n2.Childs) 
       { 
        Console.WriteLine("\t\t" + n3.Node); 

        foreach (var n4 in n3.Childs) 
        { 
         Console.WriteLine("\t\t\t" + n4.Node); 
        } 
       } 
      } 
     } 

     Console.ReadLine(); 

도움이 되었기를 바랍니다.

+0

알고 싶습니다. 그런 나무를 만드는 법? – SoniW

+0

답변을 업데이트했습니다. 코드가 원하는 결과를 얻었 으면 간단하게 만드는 방법에 대해 더 많은 메모가 있습니다. – 000

+0

감사합니다,이 코드는 분명히 나를 도울 것입니다,하지만 WPF에서 treeview를 만듭니다. – SoniW