在过滤这个可观察的集合时,我错过了什么吗?

时间:2011-09-29 14:24:42

标签: c# windows-phone-7

我有一个例程,它解析来自xml feed的数据。

    ...

    matches.Add(_item);
}

在此之后不久,我想只包括与where where子句匹配的项目

if (this.MatchType == FixtureType.Played)
{
    matches = matches.ToList().Where(
        m =>
            m.matchResult == "D"
    ).ToObservableCollection();
}

在此之后如果我打开一个断点,我注意到匹配现在包含我正在寻找的项目。

现在的问题是,数据绑定到observablecollection的控件仍然有初步数据。

3 个答案:

答案 0 :(得分:5)

问题是此方案中有2个ObservableCollection个实例

  • 控件绑定的原始
  • 您使用ToObservableCollection调用
  • 创建的新帐户

为了让新结果显示在Control中,您需要将其重新绑定到新的ObservableCollection实例。那或者内联修改原始实例。

var results = matches.Where(m => m.matchResult == "D").ToList();
matches.Clear();
foreach (var cur in results) {
  matches.Add(cur);
}

答案 1 :(得分:1)

这是因为您的控件转到matches的旧实例,您正在创建一个新的可观察集合并将其分配给matches,但您的控件未绑定到matches变量,但是它绑定时的值matches。您应该修改匹配并删除所有与您的条件不匹配的项目。

答案 2 :(得分:0)

我会问你为什么要将程序化变量绑定到。

使用MVVM Light等MVVM框架可以很好地排除这些场景。

只需在视图模型中拥有一个属性并将视图绑定到该属性,当您更新视图模型时,页面将自动更新,简单。

有很多例子,包括DEV工具中的数据绑定模板(实现基本的notifypropertychanged行为)更好的方法是升级到MVVM灯(http://mvvmlight.codeplex.com)或者更喜欢Calburn.Micro(http://caliburnmicro.codeplex.com/)