[英]C#/LINQ/Objects/Lists: How to populate a TreeView the good way?
我正在嘗試在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 ...簡單的方法,但是我認為這會產生非常討厭的代碼(我的節點深度超過了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都更漂亮。
希望您能提供幫助。
在XAML中,您可以使用HierarhicaDataTemplate
您可以嘗試遞歸。
首先定義一個遞歸數據結構來存儲您的節點信息。
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 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.