如何将一个TreeViewItem放入生成的TreeViewItem中?

3

C#:

TreeViewItem treeItem = null;
        treeItem = new TreeViewItem();
        treeItem.Header = "Audit";


        foreach (cAuditTransactionTypeEntity tt in _Pot)
        {
            char[] charsToTrim = {' ', '\t' };
            treeItem.Items.Add(new TreeViewItem() { Header = tt.TransactionType, Name = tt.TransactionType.Replace(" ", "")});
        }

        ToDoList.Items.Add(treeItem);

XAML:

<TreeView x:Name="MyTreeView" HorizontalAlignment="Left" Height="430" Margin="381,409,0,0" VerticalAlignment="Top" Width="616">
        <TreeViewItem Name="ToDoList" Header="To Do List" FontSize="20" IsExpanded="True">  
        </TreeViewItem>
    </TreeView>

我已经向TreeView中添加了TreeViewItems,如上所示。现在我需要在每个生成的TreeViewItems下添加更多的项。然而,如XAML中所示(也在上面),新生成的项目尚未添加,因此我不能命名它们以在代码中引用。

treeItem.Items.Add(new TreeViewItem() { Header = tt.TransactionType, Name = tt.TransactionType.Replace(" ", "")});

因此,我在我的代码中添加了一个名称生成器。然而,这个尝试失败了,仍然无法引用我生成的TreeViewItems,因为这些名称只在运行时生成。
有没有其他方法解决这个问题?或者是否有其他方法在代码中找到每个生成的TreeViewItems,然后在它们下面添加新的项?
2个回答

3

您只需要保留对刚刚创建的TreeViewItem的引用,并将项添加到该TreeViewItem中即可。

TreeViewItem treeItem = null;
treeItem = new TreeViewItem();
treeItem.Header = "Audit";


foreach (cAuditTransactionTypeEntity tt in _Pot)
{
    TreeViewItem createdTV ;

    char[] charsToTrim = {' ', '\t' };

    //Keep a reference to the created TreeViewItem
    createdTV = new TreeViewItem() { Header = tt.TransactionType, Name = tt.TransactionType.Replace(" ", "")}

    //Create the childs of the createdTreeView

    foreach (cAuditTransactionTypeEntity otherInfo in _OtherList)
    {
        createdTV.Items.Add(new TreeViewItem() { Header = otherInfo.TransactionType, Name = otherInfo.TransactionType.Replace(" ", "")}) ;
    }

    treeItem.Items.Add(createdTV);
}

ToDoList.Items.Add(treeItem);

如果你需要查找特定的子元素并向其中添加项目...
foreach (TreeviewItem objTreeviewItem in ToDoList.Items) 
{
    //change to the desired transaction type
    if ((objTreeviewItem.Header == "TransType")) in your comments
    {
        //add the IDs that correspond to the transaction type
        objTreeviewItem.Items.Add(new TreeViewItem() { Header = child.ID, Name = child.Name}) ;
    }

}

谢谢回复,我需要指定新项目所属的项,而不是在之前生成的每个项下重复添加所有新项目。例如,某些ID必须归属于特定的交易类型。 - user3110814
我知道如何指定新项需要放在哪个项下面,我只需要知道如何获取生成的单个项之一。 - user3110814

0
我强烈建议您使用MVVM和分层数据模板,而不是在代码中实现。如果不使用MVVM,则将一直与WPF作斗争。
网络上有很好的教程,其中一个可以在这里找到。

建议那些遇到这个问题的人使用MVVM,就好像用火箭筒打蚊子一样。 - Mauricio Gracia Gutierrez
如果他只是为了解决这个问题而放弃WPF,那么是的。如果他想要高效地使用WPF,那么不应该放弃。 - nvoigt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接