2013-03-27 84 views
2

我要删除所有标签的项目当我点击 我的代码如下如何删除除wpf之外的所有标签项目?

foreach (object item in mainTab.Items) 
{ 
    TabItem ti = (TabItem)item; 
    if ("welcomeTabItem" != ti.Name) 
    { 
     mainTab.Items.Remove(item); 
    } 
} 

给予注销按钮但是,这将创建下列错误

错误集合被修改;枚举操作可能不会执行。

是否有其他方法存在?

回答

5

你可以得到所需的项目,然后清除控制,并添加项背。

// Note that `First` will throw an exception if the item isn't found. 
TabItem ti = mainTab.Items.First(t => t.Name == "WelcomTabItem"); 
mainTab.Items.Clear(); 
mainTab.Items.Add(ti); 

另外,如果 “WelcomeTabItem” 可能无法在Items

TabItem ti = mainTab.Items.FirstOrDefault(t => t.Name == "WelcomTabItem"); 
mainTab.Items.Clear(); 
if(ti != null) 
    mainTab.Items.Add(ti); 
+0

这也是一个很好的解决方案。谢谢杰森 – manuthalasseril 2013-03-27 08:11:38

+0

完美的作品谢谢 – 2017-03-16 14:06:19

5

无法编辑IEnumerablesforeach循环中。 insted使用for循环。

for (int i = mainTab.Items.Count -1; i >=0; i--) 
{ 
    TabItem ti = (TabItem)mainTab.Items[i]; 
    if ("welcomeTabItem" != ti.Name) 
    { 
    mainTab.Items.Remove(ti); 
    } 
} 
+1

请注意,减少'i'非常重要,因为删除要移位的项目索引,如果从'0'开始并增加'i',会导致您跳过项目。 – 2013-03-27 07:44:39

+0

其作品。感谢您的帮助Hoessein – manuthalasseril 2013-03-27 08:07:04

1

使用下面的代码:

var itemsToRemove = new List(TabItem); 

foreach (object item in mainTab.Items) 
{ 
    TabItem ti = (TabItem)item; 
    if ("welcomeTabItem" != ti.Name) 
    { 
    itemsToRemove.Add(item); 
    } 
} 

foreach (var itemToRemove in itemsToRemove) 
{ 
    mainTab.Items.Remove(itemToRemove); 
} 

,而你枚举它不能从集合中删除项目

3

编辑可枚举一个Foreach内是不允许

你可以用下面的LINQ代码,删除所有除“welcomeTabItem”外的项目:

mainTab.Items.RemoveAll(i => i.Name != "welcomeTabItem"); 
+0

这与提问者想要做的事情相反。 – 2013-03-27 07:50:51

+0

@jacobaloysious:你的解决方案很好,但正如杰森所说,manuthalasseril将除去其中一个标签。 – 2013-03-27 07:56:24

+0

@JasonWatkins:谢谢,更新:) – 2013-03-27 07:56:24

4

您可以使用LINQ删除的项目,如本 -

mainTab.Items.RemoveAll(ti => ((TabItem)ti).Name != "welcomeTabItem"); 

确保你的文件的顶部添加using System.Linq;命名空间。

相关问题