为了账号安全,请及时绑定邮箱和手机立即绑定

在WPF Treeview中搜索特定的TreeViewItem

在WPF Treeview中搜索特定的TreeViewItem

C#
慕桂英4014372 2021-03-31 05:49:17
我正在使用wpf TreeView。我正在尝试搜索中的所有项目,TreeView以在其中找到所需的项目TreeViewItem。我的代码:parent是string我要搜索的所需项目的标题。foreach (TreeViewItem item in treeView.Items){       if (item.Header.ToString().Contains(parent))   {       //Do Something to item that is found    }}我在这段代码中遇到的问题是它将在的顶部两层进行搜索TreeView。如果item内的item内有一个TreeView,则item找不到。话虽如此,我还是在代码中添加了代码,但这只会将问题延长到更高一级TreeView。foreach (TreeViewItem item in treeView.Items){   foreach(TreeViewItem subItem in item.Items)   {       if (subItem.Header.ToString().Contains(parent))       {           //Do Something to item that is found                }   }       if (item.Header.ToString().Contains(parent))   {       //Do Something to item that is found    }}有没有一种方法可以搜索整个内容TreeView以及其中的所有items内容?我可以TreeView递归搜索吗?
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您应该研究递归。本质上,您需要一个采用treeviewitem并遍历其所有子级的方法。对于每一个方法,该方法都会调用自身,并传入孩子。如果您从未做过此事,那么当您初次查看它时会有点头脑融化。了解原理。但大致来说:


    private void recurseItem(TreeViewItem item)

    {

        foreach (var subItem in item.Items)

        {

            // compare header and return that item if you find it

            if(!gotTheItem)

               recurseItem(subItem);

        }

    }

您需要一个遍历树的顶级项目的foreach循环,并将每个项目传递到其中。不要只是将其粘贴(您只是学习剪切然后粘贴)阅读递归并考虑一下。请注意,您将要通过设置布尔标志来表示已找到该项目,并避免重复其余所有操作,以表示已找到该项目。


请注意,此代码主要是为了向递归的概念介绍新手。它并非旨在成为理想的剪切和粘贴解决方案。

如果使用绑定的树视图尝试此操作,则会发现Items集合具有绑定的对象,而不是treeviewitems。


查看完整回答
反对 回复 2021-04-10
?
慕容708150

TA贡献1831条经验 获得超4个赞

Andy的解决方案将满足您的需求,但是更加通用和可重用的解决方案将是迭代使用ItemCollection。有了这个,您可以传递任何继承了ItemCollectionwhile的对象类型,从而避免不包含子项目的异常。如果您的树中有不同类型的孩子,那就太好了。


private void IterateTree(ItemCollection items)

{     

    //Iterate each item

    foreach (var item in items)

    {

        //Your IF logic here


        //Iterate again if item contains sub items.

        if (item is ItemsControl)

        {

            ItemsControl ic = (ItemsControl)item;

            IterateTree(ic.Items); //Recursive call

        }

    }      

 }


查看完整回答
反对 回复 2021-04-10
  • 3 回答
  • 0 关注
  • 372 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信