0

TreeViewにたくさんの情報を表示しようとしています。例えば:

Continent 1
    Country 1
        City 1
        City 2
        City 3
    Country 2
        City 1
        City 2
    Country 3
Continent 2
    Country 1
        City 1
        City 2
Continent 3

この情報は、リストを介してクラス/オブジェクトに保存されます。したがって、Continent型のオブジェクト/クラスには、Country型のいくつかのオブジェクト/クラス(もちろん、いくつかのメソッド、プロパティなど)のリストが含まれています。すべてのデータは、XMLファイルからLINQを介して入力されました。

今、私はすべての大陸が入っているリストを取り、それをforeachすることができました。このforeachの中で、私はすべての国でリストをforeachします。そして、私はforeachします...簡単な方法ですが、これは本当に厄介なコードになると思います(私のノードは3レベルよりもはるかに深くなります...)

それで、これを達成する簡単な方法はありますか?たぶんLINQで?例えば

TreeView.Nodes =
    List[Countries].All.Where(Country.Name = Node.Text).Add(
        (List[Cities].All.Where(City.Name = Node.Text).Add(
            List[People].All.Where(Person.Name = Note.Text)));

私は知っています、ただのごみのコードですが、この方法では、ネストされたすべてのforeachよりもはるかに美しく見えます。

お役に立てば幸いです。

4

2 に答える 2

1

XAML では、 HierarhicaDataTemplateを使用できます。

于 2012-10-31T12:00:00.257 に答える
0

再帰を試すことができます。

まず、ノード情報を格納するための再帰的なデータ構造を定義します。

public interface IRecursiveStructure
{
   string Name {get;}
   IList<IRecursiveStructure> Children {get;}
}

インターフェイスを実装し、それに応じてデータを入力します。

次に、ツリーノードをロードするには、再帰的な方法を使用します(これはテストされていない擬似コードです)。

public void LoadTreeNodes(IRecursiveStructure data, TreeNode parentNode)
{
   foreach(var child in data.Children)
   {
        node = new Node{Name=data.Name};
        parentNode.Add(node).
        LoadTreeNodes(node,child);
   }

}

これは単なる擬似コードの例であるため、機能させるには少し作業する必要があります。

再帰の概念の詳細については、http://en.wikipedia.org/wiki/Recursionを参照してください。

于 2012-10-31T12:12:14.187 に答える