【问题标题】:Remove Items from an ObservableCollection while Looping through the Collection [duplicate]在遍历集合时从 ObservableCollection 中删除项目 [重复]
【发布时间】:2017-08-09 00:55:31
【问题描述】:

我正在通过 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));
             }      

我已经尝试过使用上述内容,但我缺少一些关键部分以使其正常工作。

【问题讨论】:

    标签: c# wpf list mvvm observablecollection


    【解决方案1】:

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

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

    这样的事情应该做的工作

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

    【讨论】:

    • 感谢您的回答。我最终在从可观察集合创建的列表上进行了一个 foreach 循环,然后从集合中删除了列表中与条件匹配的每个项目。
    • 欢迎您。当您接受并投票时会很好。
    猜你喜欢
    • 1970-01-01
    • 2015-10-05
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 2019-02-17
    相关资源
    最近更新 更多