数据源在循环时跳过项目?

时间:2013-12-24 10:33:50

标签: windows-phone-8 windows-phone datasource observablecollection longlistselector

我已将数据源绑定到longlistselector并且它完美运行。我从一个相当大的嵌套json对象中检索数据,它可以工作。然而,当我尝试通过一个名为“城市”的属性过滤项目时,会发生一些奇怪的事情。在我的ViewModel中,我做了这个简单的检查:

private ObservableCollection<GigViewModel> _gigs;
public ObservableCollection<GigViewModel> Gigs
{
    get
    {
        for (int i = 0; i < _gigs.Count; i++)
        {
            if (_gigs[i].City == "venlo")
            {
                _gigs.Remove(_gigs[i]);
            }
        }
        return _gigs;
    }
    private set
    {
         if (value != _gigs)
         {
             _gigs = value;
         }
    }
}

所以当城市字符串等于'Venlo'时,我希望它被删除。城市字符串可以是两件事之一,它可以是“Sittard”或“Venlo”。当我用单词'Sittard'过滤列表时,输出是正确的,它只显示来自Venlo的项目(这是列表的一个较大部分),但是当我按'Venlo'过滤时,列表仍然包含一些项目城市字符串为'Venlo'。

当我尝试调试时,等待的时间越长,列表被过滤的时间就越多,过了一段时间后,列表被完全过滤并且正确无误。但是当我在没有断点的情况下运行它时,列表不会被正确过滤。对这种奇怪行为的任何解释?

1 个答案:

答案 0 :(得分:1)

您可能遇到问题,因为您正在使用_gigs.Count作为循环上限的循环中从列表中删除项目。我不确定每次执行循环时是否重新评估此值,但如果没有,那么它可能会给你带来奇怪的行为。