检查treeview是否包含一个项目
本文关键字:项目 包含一 是否 treeview 检查 | 更新日期: 2023-09-27 18:03:02
这个问题看起来很简单。我有一个树视图,我们叫它MyTreeView,填充了所有的驱动器号,树视图看起来是这样的
答:'
C: '
D: '
F: '
如何检查treeview是否包含特定项?树视图如何识别它的项目?我已经创建了一个MessageBox来显示MyTreeView.Items.GetItemAt(1),它将item 1标识为:
"System.Windows.Controls。TreeViewItem Header:C:' Items。数:1"
先尝试最简单的方法,这显然行不通:
if (MyTreeView.Items.Contains(@"C:'")
{
MessageBox.Show(@"Tree contains C:'");
}
下一个最简单的事情是尝试做一个TreeViewItem看起来像我想要的,这也不工作:
TreeViewItem myItem = new TreeViewItem();
myItem.Header = @"C:'";
if (MyTreeView.Items.Contains(myItem)
{
MessageBox.Show("Tree contains " + myItem.ToString());
}
只是为了确保我的基本概念是正确的,我尝试了一些循环逻辑,这实际上是有效的:
var myItem = MyTreeView.Items.GetItemAt(1);
if (MyTreeView.Items.Contains(myItem)
{
MessageBox.Show("Tree contains " + myItem.ToString());
}
输出:
Tree包含System.Windows.Controls.TreeViewItem Header:C:' Items。数:1"
我做错了什么?我如何检查我的树是否包含类似"C:'"的内容?
编辑:
构建树的代码如下:
(基本上是从网上复制粘贴过来的)
foreach (string myString in Directory.GetLogicalDrives())
{
TreeViewItem item = new TreeViewItem();
item.Header = myString;
item.Tag = myString;
item.FontWeight = FontWeights.Normal;
item.Items.Add(dummyNode); // this is (object)dummyNode = null
item.Expanded += new RoutedEventHandler(DWGFolder_Expanded);
item.Selected += new RoutedEventHandler(DWGFolder_Selected);
// the Expanded event is very similar,
// subitem.Header is the folder name (Testing),
// while subitem.Tag is the full path (C:'Testing)
MyTreeView.Items.Add(item);
}
我尝试匹配TreeViewItem对象
我相信. contains()将通过引用检查值,因为它不是一个简单的字符串对象。这要求您遍历每个项,直到检索到与标题匹配的项。
LINQ例子
if (MyTreeView.Items.Cast<TreeViewItem>().Any(item => item.Header.ToString() == @"C:'"))
{
MessageBox.Show(@"Tree contains C:'");
}
Contains
在集合中查找完全相同的实例。如果您没有要检查的对象,则不能使用Contains
。
但是你可以使用一些基本的LINQ查询…将LINQ命名空间添加到您的类:
using System.Linq;
如果你的项目确实只是字符串,然后使用这个查询(编辑 -虽然,如果它们只是字符串,Contains
应该工作,因为它们的相等比较器不像那些常规引用类型,而是按值比较):
if (MyTreeView.Items.Cast<string>().Any(s => s == @"C:'"))
{
// Do stuff
}
如果你的项目是treeviewitem,你可以使用这个:
if (MyTreeView.Items.Cast<TreeViewItem>().Any(i => i.Header.ToString() == @"C:'"))
{
// Do stuff
}
但是你的条目可以是任何我们不知道的类,或者你的头绑定可以改变…在不知道如何向TreeView添加项目的情况下,很难给你最好的选择。
EDIT -记住,这将只搜索树的第一层。如果您要查找的物品放置在更深的地方,则必须进行递归搜索。在这种情况下,也许从一开始就把这些值存储在某个地方会更好。