TreeView中的动态ObservableCollection?

时间:2013-02-11 08:56:10

标签: c# treeview observablecollection

我遇到这个问题,我无法将数据加载到TreeView中,但我必须手动完成。我的静态解决方案如下所示:

public static ObservableCollection<ClassOfDoom> GetAll()
    {
        ObservableCollection<ClassOfDoom> listToReturn = new ObservableCollection<ClassOfDoom>();

        ClassOfDoom treeItem = null;

        OUViewModel ouvm = new OUViewModel();
        int[] tempOU = ouvm.HierarchyIntOU;
        int[] tempP = ouvm.HierarchyIntParent;

        treeItem = new ClassOfDoom("Root");
        treeItem.cID = tempOU[0];
        treeItem.pID = tempP[0];
        for (int i = 0; i < ouvm.HierarchyIntParent.Length; i++)
        {
            if (treeItem.cID == tempP[i])
            {
                treeItem.ClassOfDooms.Add(new ClassOfDoom(tempOU[i].ToString()));
                treeItem.ClassOfDooms.Last().pID = tempP[i];
                treeItem.ClassOfDooms.Last().cID = tempOU[i];
                for (int i1 = 0; i1 < ouvm.HierarchyIntParent.Length; i1++)
                {
                    if (treeItem.ClassOfDooms.Last().cID == tempP[i1])
                    {
                        treeItem.ClassOfDooms.Last().Countries.Add(new ClassOfDoom(tempOU[i1].ToString()));
                    }
                }
            }   
        }
        listToReturn.Add(treeItem);    
        return listToReturn;
    }

这有效但你可以看到它只有三个级别,我不是一个动态的水平。如果有人想知道我的ClassOfDooms列表如下:

public ObservableCollection<ClassOfDoom> ClassOfDooms
{
    get
    {
        if (classOfDooms == null) classOfDooms = new ObservableCollection<ClassOfDoom>();
        return classOfDooms;
    }
    set { classOfDooms = value; }
}

我想再次声明,从我的数据库或类似的东西中读取数据我没有问题。 TreeView获取正确的信息并不是全部。

编辑:我自己解决了这个问题:

    ClassOfDoom[] asdfDooms = new ClassOfDoom[ouvm.HierarchyIntParent.Length];
    for (int i = 0; i < ouvm.HierarchyIntParent.Length; i++)
    {
        asdfDooms[i] = new ClassOfDoom();
        asdfDooms[i].cID = tempOU[i];
        asdfDooms[i].pID = tempP[i];
        asdfDooms[i].name = tempPersonName + asdfDooms[i].cID.ToString();
    }
    for (int aint = 0; aint < ouvm.HierarchyIntParent.Length; aint++)
    {
        for (int i = 0; i < ouvm.HierarchyIntParent.Length; i++)
        {
            if (asdfDooms[aint].cID == asdfDooms[i].pID)
            {
                asdfDooms[aint].classOfDooms.Add(asdfDooms[i]);
            }
        }
    }
    listToReturn.Add(asdfDooms[0]);

1 个答案:

答案 0 :(得分:0)

尝试将INotifyPropertyChanged interfaceHierarchicalDataTemplate控件结合使用,这应确保对基础数据结构所做的更改反映在TreeView结构中。