2011-06-22 159 views
2

我有一个wpf c#应用程序,它从文本文件加载任务到treeView,关于任务的数据加载到列表中,我试图删除列表中的位置I中的数据,但我无法弄清楚如何。我有这个for循环检查,看看是否所选的treeView项目是在列表中的位置I的项目,如果是的话,我想从列表中删除该项目。这是for循环的工作,即时通讯只是想知道如何做实际的删除,我试过的东西,如.delete.remove我发现msdna。从c列表中删除#

for (int i = 0; i < name.Count; ++i) 
{ 
     string selectName = ((TreeViewItem)(treeView1.SelectedItem)).Header.ToString(); 

     if (selectName == name[i]) 
     { 

     //name.Remove(i) or name.Remove[i] or name[i].Remove 
     } 
} 
+4

要小心您正在通过循环的东西删除对象。你将不得不调整索引来补偿。 –

回答

5

如果name是List<T>,那么你可能想name.RemoveAt(i)如果我理解正确的问题。

或者,您可以使用name.RemoveAll(n => n == selectName);而不是for循环。

+0

这就是我需要的,谢谢 – Beef

+1

正如别人指出的那样,如果你使用循环,你需要小心索引。我建议向后循环: 'for(int i = name.Count-1; i> = 0; i - )' – daveaglick

+0

@Beef:请成为一个好公民,并将答案标记为已接受,如果它解决了你的问题。 –

0

您必须给List.Remove()一个对象,而不是索引。

因此,假设名字是一个列表,

name.Remove((TreeViewItem)treeView1.SelectedItem); 
+0

您也可以通过索引删除。 –

+0

小心删除一般列表中的对象;仔细检查equalitycomparer实际上是否支持您的用例。否则,你可能最终会遇到一个在索引#0处默默删除的经典错误(因为相等比较器总是匹配) – sehe

0

根据您的应用需求,您的数据结构应具有父子关系一段时间。您所要做的就是删除从父项中选择的ChildWPF中的TreeView只应自动更新。

为了便于管理,我建议您阅读Josh Smith's article on using ViewModels with the TreeView。相信我,它会让你的生活越早开始使用更强大的数据结构就越容易,只记得TreeView只代表提供的数据,你应该有其他方法直接编辑数据,而不是TreeView

1

如何:

string selectName = ((TreeViewItem)(treeView1.SelectedItem)).Header.ToString(); 
name.RemoveAll(x => x == selectedName);