C#/LINQ/Objects/list:如何填充树视图?

C#/LINQ/Objects/list:如何填充树视图?,c#,xml,linq,list,treeview,C#,Xml,Linq,List,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 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
此信息通过列表存储在类/对象中。因此,一个大陆类型的对象/类包含一个列表,其中包含几个国家类型的对象/类(当然还有一些方法、属性等)。所有数据都是通过LINQ从XML文件中填充出来的

现在,我可以把所有大陆都放在名单上,然后再看一遍。在这个论坛里,我与所有国家一起分享这份名单。然后我开始。。。 简单的方法,但我认为这会导致非常糟糕的代码(我的节点要比3层深得多…)

那么有没有一个简单的方法来实现这一点呢?也许和林克在一起?e、 g

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更漂亮


我希望您能提供帮助。

在XAML中,您可以使用递归

首先定义一个递归数据结构来存储节点信息

public interface IRecursiveStructure
{
   string Name {get;}
   IList<IRecursiveStructure> Children {get;}
}
这只是一个伪代码示例,因此您需要对其进行一些处理才能使其正常工作


有关递归概念的更多信息,请参阅。

如何使用递归数据结构来存储信息和递归方法来设置树?@GavinSinai“递归”是什么意思?我认为如果里面有任何列表,比如扫描目录以查找更多目录/级别,就不可能“全局”对象。请举个例子好吗?哇。那个看起来很有趣。但我不知道如何将其应用到现有数据中,而不用自己循环遍历每个级别(对象)(这将导致使用foreach的基本方法)。也许是一个例子?例子在文章中。在hierahical模板中,您将ItemSource设置为下一个级别(因此是hierahical),如果您愿意,它可以是相同的类型。其中一些在里面有两个列表,一些没有表示“名称”的字符串(有时是整数,另一次在某些情况下,我必须首先从文件中加载名称等)接口意味着对象必须遵循在任何时候都没有给出的特定结构。您需要实现每个类的接口。每个类都有不同的实现。我不知道你还能“优雅地”解决这个问题。好的。明白了。这比单纯的痛苦更优雅。。当一个对象有两个列表时,情况如何?在上面的foreach中,它只是循环遍历列表子对象,这意味着每个对象只有一个列表。
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);
   }

}