C# TreeView中的动态可观测采集?

C# TreeView中的动态可观测采集?,c#,treeview,observablecollection,C#,Treeview,Observablecollection,我有一个问题,我无法将数据加载到我的树视图中,但我必须手动执行。我的静态解决方案如下所示: public static ObservableCollection<ClassOfDoom> GetAll() { ObservableCollection<ClassOfDoom> listToReturn = new ObservableCollection<ClassOfDoom>(); ClassOfDoom tree

我有一个问题,我无法将数据加载到我的树视图中,但我必须手动执行。我的静态解决方案如下所示:

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;
    }
public ObservableCollection<ClassOfDoom> ClassOfDooms
{
    get
    {
        if (classOfDooms == null) classOfDooms = new ObservableCollection<ClassOfDoom>();
        return classOfDooms;
    }
    set { classOfDooms = value; }
}
    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]);
publicstaticobserveCollection GetAll()
{
ObservableCollection listToReturn=新的ObservableCollection();
ClassOfDoom treeItem=null;
OUViewModel ouvm=新的OUViewModel();
int[]tempOU=ouvm.HierarchyIntOU;
int[]tempP=ouvm.HierarchyIntParent;
treeItem=新的房间类别(“根”);
treeItem.cID=tempOU[0];
treeItem.pID=tempP[0];
for(int i=0;i
这是可行的,但正如你所看到的,它只有三个级别,我不希望有动态的级别。如果有人想知道我的门类列表如下:

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;
    }
public ObservableCollection<ClassOfDoom> ClassOfDooms
{
    get
    {
        if (classOfDooms == null) classOfDooms = new ObservableCollection<ClassOfDoom>();
        return classOfDooms;
    }
    set { classOfDooms = value; }
}
    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]);
public ObservableCollection类别的门
{
得到
{
如果(classOfDooms==null)classOfDooms=newObservableCollection();
返回门类;
}
设置{classOfDooms=value;}
}
我想再次声明,从数据库中读取数据或诸如此类的数据并没有问题。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;
    }
public ObservableCollection<ClassOfDoom> ClassOfDooms
{
    get
    {
        if (classOfDooms == null) classOfDooms = new ObservableCollection<ClassOfDoom>();
        return classOfDooms;
    }
    set { classOfDooms = value; }
}
    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]);
ClassOfDoom[]asdfDooms=newclassofdoom[ouvm.HierarchyIntParent.Length];
for(int i=0;i
尝试结合控件实现,这将确保对底层数据结构所做的更改反映在TreeView结构中。

我快速查看了INotifyPropertyChanged接口,但不太理解如何在代码中实现它。你能给我举个例子吗?你需要更多的信息吗?看看,这会给你一点背景知识,告诉你为什么它是必要的,你会在哪里使用它。