2017-04-30 34 views
-2

どのように質問しても、この質問に対する回答は見つかりません。ツリービューがWinFormsであれば解決策があるようですが、WPFであれば解決できません。ツリービューをトラバースしてすべてのノードから値を取得する方法

実行時にOOBというツリービューにバインドされたXMLファイルをロードしています。ユーザーは、ツリービューに対するあらゆる種類の編集(ノードの追加および削除、ノードの内容の変更など)を実行できます。これらはすべて完全に機能します。さて、私はそれをXMLファイルとして保存し直さなければなりません。どうやら、これはWPFではほぼ不可能です。

この時点で、私が考えることのできることは、ツリー全体を横断することです(十分に簡単にすべてのノードを展開する必要があるかもしれません)。次に、1つずつ読むことができますノードを作成し、xmlWriterを使用してXMLファイルに書き込みます。

誰かが良いアイデアを持っていない限り、C#とWPFでツリー全体をどのようにトラバースして、それぞれの内容を取得できますかNode.name?各ノードの内容を取得したら、ツリー構造を再構成してXMLファイルとして書き出すことができます。

+0

を試してみてください。例えば、 [wpf treeview binding](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。しかし、私はあなたが 'TreeView'のすべての' TreeViewItem'子を取得するには、[この質問](https://stackoverflow.com/q/974598/3744182)の 'FindVisualChildren (treeView) 。 – dbc

+1

通常、必要と思われる場合にのみダウン投票にコメントすることがあります。多くの場合、ポストに欠けているものを示すために近い投票が必要です(2つのダウン・ボートと2つのクローズド・ボートがあるので、そこにはパリティがあるようです)。 SOの質問は、手元の質問に直接関係しないものでなければならないことに注意してください。あなたのためにあなたの質問を編集してコミュニティの基準を満たすように改善しました。手元にある証拠に基づいて、私はあなたの質問があまりにも幅広く、良い[mcve]を含めないことで、投票を得たと言います。 [ask]も参照してください。末尾のリンクを含む –

答えて

-3

は通常1は、いくつかの基礎となるデータモデルにツリービューをバインドし、そのデータモデルを救うこれらのソリューションの1

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

関連する問題