从ObservableCollection删除多个项目

时间:2018-07-05 16:16:33

标签: c# xamarin.forms observablecollection

我想在C#中删除ObservableCollection中的多个项目。我的代码是:

var item = (MoveDataModel)e.SelectedItem;
var answer = await DisplayAlert("Confirmation", "Are you sure you wish to delete " + item.value + "?", "Yes", "No");
        if (answer)
{
    var type = item.type;
    var value = item.value;

    foreach (var listItem in items)
    {
        if ((listItem.value == item.value) || (listItem.location == value && type == "Location"))
        {
            items.Remove(listItem);
            itemCount--;
        }
    }
}

第一次迭代工作正常。但是,它挂起了

foreach (var listItem in items)

第二遍。我不确定如何使其工作。

2 个答案:

答案 0 :(得分:1)

在迭代集合时无法修改它。尝试这样的事情(我还没有检查语法,可能需要清理)

var removeList = items.Where(x => x.value == value).Where(y => y.type = type).ToList();

foreach(var i in removeList) {
  items.Remove(i);
  itemCount--;
}

答案 1 :(得分:1)

拥有自己的计数器,可以在列表中向后循环,这样您就不必为删除的索引重新调整。

System.Collections.ObjectModel.ObservableCollection<object> list = new System.Collections.ObjectModel.ObservableCollection<object>();
private void RemoveStuff()
{
    var i = list.Count - 1;
    for (; i <= 0; i--)
    {
        // some checks here to make sure this is the time you really want to remove
        list.Remove(i);
    }

}