如何将TreeViewItem放入生成的TreeViewItem?

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:

     

我已将TreeViewItems添加到TreeView ,如上所示。 现在我需要在每个生成的TreeViewItems下添加更多项目。 但是,如XAML(也在上面)中所示,新生成的项目尚未添加,因此我无法将它们命名为在代码中引用它们。

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

因此,我在代码的这一部分添加了名称生成。 此外,此尝试失败,仍然无法引用我生成的TreeViewItems ,因为名称仅在运行时生成。

还有另外一种解决方法,还是有另一种方法可以在代码中找到每个生成的TreeViewItems ,然后在它们下面添加新Items

您只需要保留对刚创建的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}) ; } } 

我强烈建议您使用MVVM和分层数据模板,而不是在代码中执行此操作。 如果你不使用MVVM,你将一直对抗WPF。

网上有很好的教程,一个可以在这里找到。