0

データを 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;
    }

これは機能しますが、ご覧のとおり、3 つのレベルしかなく、動的な量のレベルが必要です。私の 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]);
4

1 に答える 1

0

INotifyPropertyChanged インターフェイスをHierarchicalDataTemplateコントロールと組み合わせて実装してみてください。これにより、基になるデータ構造に加えられた変更が TreeView 構造に反映されるようになります。

于 2013-02-11T09:00:28.417 に答える