wpf datagrid中的特定树样式分组

时间:2014-12-25 12:41:43

标签: wpf datagrid grouping wpfdatagrid

是否可以在WPF DataGrid顶级组中拥有不同数量的子组?

我需要在datagrid中有类似树视图的东西,其中类似于扩展器的树节点仅包含一些头,而底层叶包含实际数据行。我试图通过以下方法来实现这一目标:

public class User
{
    public Token Token { get; set; }

    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
    public string Country { get; set; }
}

public class Token
{
    public string PrincipalName { get; set; }

    public Token Child { get; set; }

    public int Depth
    {
        get
        {
            return Child == null ? 1 : Child.Depth + 1;
        }
    }

    public Token Add(string childPrincipalName)
    {
        var token = this;
        while (token.Child != null)
        {
            token = token.Child;
        }

        var child = new Token { PrincipalName = childPrincipalName };
        token.Child = child;
        return this;
    }

    public static Token Create(string principalName)
    {
        return new Token { PrincipalName = principalName };
    }
}

然后我创建了一些像

这样的条目
var users = new List<User>{
                new User{ Name="Hiro Nakamura", Gender="M", Age=24, Country="Japan",
                Token = Token.Create("first")},
                new User{ Name="Mohinder Suresh",Gender="M", Age=26, Country="India",
                Token = Token.Create("second").Add("1")},
                new User { Name = "Claire Bennette", Gender = "F", Age = 19, Country = "USA",
                Token = Token.Create("second").Add("1")},
                new User{ Name="Mohinder Suresh",Gender="M", Age=26, Country="India",
                Token = Token.Create("second").Add("2")},
                new User { Name = "Claire Bennette", Gender = "F", Age = 19, Country = "USA",
                Token = Token.Create("second").Add("2")}
 };

并形成一个集合视图:

var collection = new ListCollectionView(users);

            int tokenLength = users.Max(u => u.Token.Depth);
            if (tokenLength > 0)
            {
                string token = "Token";
                string child = ".Child";
                string principalName = ".PrincipalName";
                for (int i = 0; i < tokenLength; i++)
                {
                    collection.GroupDescriptions.Add(new PropertyGroupDescription(token + principalName));
                    token += child;
                }
            }

问题是&#34;第二&#34; group有两个小组:&#34; 1&#34;和&#34; 2&#34; (这是正确的)而#34;第一个&#34;有一个空名称的子组(这不是我需要的)。我想要&#34;首先&#34;小组没有一个小组,只有&#34; Hiro Nakamura&#34;用户本身。

0 个答案:

没有答案