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);
}
}