2011-09-23 62 views
1

我正在爲WPF(C#.net)中的聊天創建應用程序。 我創建了一個類用戶具有以下屬性: 1.Company_name 2.Branch 3.Designation 4.User_name 我得到一流的用戶對象的列表。 我想在樹視圖來顯示用戶爲:在對象分組中創建WPF中樹視圖的視圖模型

公司名稱1 -Branch1 - :名稱1 *用戶名1 *用戶名2 -Branch2 - :名稱1 *用戶NAME3 - :Designation2 *用戶name4

當用戶列表刷新時,樹結構將重新加載。 我想創建這個樹結構考慮與同一父母的用戶。 我在運行時獲取用戶列表,當新用戶登錄。 如何創建此類樹? 我想知道,如何使用「ViewModel並在WPF窗口中顯示它」來創建這樣的TreeView?

回答

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中創建樹狀視圖。 – SoniW