【问题标题】:Creation of viewmodel for treeview in WPF with grouping of objects使用对象分组在 WPF 中为树视图创建视图模型
【发布时间】:2011-09-24 17:57:10
【问题描述】:

我正在创建一个在 WPF(C#.net) 中聊天的应用程序。 我创建了一个具有以下属性的类用户: 1.公司名称 2.分公司 3.指定 4.用户名 我正在获取类用户的对象列表。 我想在树视图中将用户显示为:

公司名称1 -Branch1 -:指定1 *用户名1 *用户名2 -Branch2 -:指定1 *用户名3 -:指定2 *用户名4

当用户列表被刷新时,树形结构将被重新加载。 考虑到具有相同父级的用户,我想创建此树结构。 当新用户登录时,我在运行时获取用户列表。 如何创建这样的树? 我想知道,如何使用“ViewModel 并在 WPF 窗口中显示”创建这样的树视图??

【问题讨论】:

    标签: c#


    【解决方案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();
    

    我希望这会有所帮助。

    【讨论】:

    • 我想知道,如何创建这样的树?
    • 我更新了答案,如果这是代码产生你想要的结果,我有更多关于它的注释以使其更简单。
    • 谢谢,这段代码肯定会对我有所帮助,但我正在 WPF 中创建树视图。
    • 我想知道,如何应用此代码在 WPF 中创建 ViewModel 和 treeview。
    猜你喜欢
    • 2016-04-03
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多