在循环收集

时间:2017-03-17 12:47:14

标签: c# wpf list mvvm observablecollection

我正在循环浏览一个ObservableCollection,用于通过将布尔值设置为true来标记的项目。在完成我需要的项目后,我想从OnservableCollection中删除它。我不能在foreach循环中这样做,所以我想要列出所有标记的项目,然后在foreach循环后立即清除集合中的所有项目。但我甚至无法开始,因为我不知道如何在foreach循环中获取项目的索引。

            private void Upload()
            {
                List<TestResult> kill;
                foreach (var tr in TestResults)
                {
                    if (tr.CanUpload)
                    {
                        StatusContent = "Uploading " + tr.FileName;
                        FileOps.UploadDocument(tr);
                        kill.Add(tr);
                        tr.CanUpload = false;
                        RaisePropertyChanged("TestResults");
                    }

                }
                //this doesn't work 
                //TestResults.Remove(TestResults.Where(x => x.CanUpload == true));
             }      

我尝试过使用上面的内容,但我遗漏了一些重要的内容,以使其正常工作。

1 个答案:

答案 0 :(得分:2)

改为使用for循环。就像你注意到你无法删除你正在使用foreach循环的集合中的项目。

但是你必须在删除项目时更新当前的项目索引;)

这样的事情应该做的工作

for (var i = myList.Count() - 1; i >= 0; i--)
{
    ...
}