2017-04-30 95 views
-2

無論我怎麼問,我都找不到這個問題的答案。如果樹形視圖位於WinForms中,但似乎有解決方案,但如果它位於WPF中則不是。如何遍歷treeview並從所有節點獲取值

我在運行時加載了一個綁定到名爲OOB的treeview的XML文件。用戶可以對樹視圖執行各種編輯(添加和刪除節點,更改節點內容等)。所有這些都很完美。現在,我必須將其保存爲XML文件。顯然,這在WPF中幾乎是不可能的。

此時所有我能想到做的是遍歷整個樹(從我讀過它可能有必要展開所有的節點是容易做得不夠),然後我可以一個接一個,讀節點並使用xmlWriter將它們寫入XML文件。因此,除非有人有更好的主意,我如何在C#和WPF遍歷整棵樹,獲取每個Node.name的內容?一旦我有了每個節點的內容,我就能夠重構樹結構並將它們寫成XML文件。

+0

通常人們會綁定的TreeView一些基本的數據模型和保存數據模型的一個。見例如[wpf treeview綁定](https://stackoverflow.com/q/5295644/3744182)或[如何將動態json綁定到treeview wpf](https://stackoverflow.com/q/23812357/3744182)或https:/ /www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode。但我認爲你應該能夠使用[這個問題](https://stackoverflow.com/q/974598/3744182)中的FindVisualChildren (treeView)'來獲得一個'TreeView'的所有'TreeViewItem'子元素。 – dbc

+1

通常情況下,您會發現只有在看起來有必要的時候,人們纔會評論反對票。通常,近距離投票就足以表明一個職位缺少什麼(並且你有兩個迴應票和兩個近親票,所以在那裏似乎有平等)。請注意,SO問題應該沒有與當前問題直接相關的任何問題。我代表你編輯了你的問題來改進它,以便它符合社區標準。根據手頭的證據,我會說你的問題因太寬泛而不包括好的[mcve]而獲得了低票。另請參見[問],包括末尾 –

回答

-3

嘗試這些解決

IEnumerable<TreeNode> Collect(TreeNodeCollection nodes) 
{ 
    foreach(TreeNode node in nodes) 
    { 
     yield return node; 

     foreach (var child in Collect(node.Nodes)) 
      yield return child; 
    } 
} 

另一種解決方案

protected void TraverseNodes(TreeNodeCollection nodes, string action, int maxDepth = 2) 
    { 
     foreach (TreeNode node in nodes) 
     { 
      if (node.ChildNodes.Count > 0 && node.Depth < maxDepth) 
       TraverseNodes(node.ChildNodes, action, maxDepth); 

      //do something!!! 
      var x = node.Text; 
      node.Checked = !node.Checked; 
     } 
    } 
+0

的鏈接TreeNodeCollection只存在於WinForms中。這是爲WPF。 – zetar

相關問題