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 类型的对象/类的列表(当然还有一些方法、属性等)。所有数据都是通过 LINQ 从 XML 文件中填充的。

现在,我可以获取包含所有大陆的列表 - 并 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

In XAML you can use the 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 回答