簡體   English   中英

這樣的物體有名字嗎? 我將如何用它填充樹視圖?

[英]Is there a name for an object like this? And how would I go about populating a treeview with it?

我使用這樣的對象結構:

class Node
{
    string name;
    List<Node> children = new List<Node>{};
    Node parent;
}

我可以添加與當前節點相同級別的子節點或節點。

有這樣的對象的術語嗎?

我將如何用它填充 wpf 樹視圖,使其看起來像這樣:

parent0
   child0
   child1
       child0ofchild1
    .
    .
    .

我希望它能夠無限長,因此固定的 for 循環不是一種選擇。 foreach 工作得很好,但是當我在這棵樹中下降超過 2 個級別時遇到了問題。 c# 中是否已經有一些更簡單的東西,或者我是否在正確的軌道上?

對不起,如果這是一個重復的問題,但我不知道谷歌的正確術語......

要遍歷一棵樹,遞歸函數是通用的解決方案。 如果綁定到 WPF 樹,我將使用 ObservableCollection 而不是 List 作為子項。 我做了一個簡單的例子,用遞歸函數構建一棵樹,然后在 WPF TreeView 中顯示它。 這是數據類:

    public class TreeNode {
        public ObservableCollection<TreeNode> Children {
            get;
        } = new ObservableCollection<TreeNode>();

        public string Name {
            get;set;
        }
    }

這是填充樹的遞歸函數(它生成 5 代子節點,每個父節點有 6 個子節點):

        /// <summary>
        /// Fill a recursive tree
        /// </summary>
        /// <param name="node">The treenode to generate children for</param>
        /// <param name="depth">Current depth, always incremented by 1 when going deeper in recursion</param>
        /// <param name="namePostfix">Name postfix, just for generating display name for the nodes</param>
        void fillTree(TreeNode node, int depth, string namePostfix) {
            // exit to prevent endless recursion
            if (depth >= 5) {
                return;
            }
            for (int i = 0; i < 6; ++i) {
                var child = new TreeNode() {
                    Name = $"Node{namePostfix}{i}"
                };
                fillTree(child, depth + 1, namePostfix + i);
                node.Children.Add(child);
            }
        }

如果你想遍歷樹,你應該根據你選擇的遍歷方法寫一些類似的東西(來自上一個答案)。

XAML 標記(有關基本教程,請參閱此鏈接):

    <TreeView x:Name="tv">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="{x:Type local:TreeNode}" ItemsSource="{Binding Children}">
                <TextBlock Text="{Binding Name}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

在窗口/頁面的構造函數中:

            fillTree(tree, 0, "");
            tv.Items.Add(tree);  // tv is the x:Name of the TreeView

當然這只是一個簡單的例子,我會使用視圖模型和數據綁定等,但這超出了這個問題的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM