我有一个例程,它解析来自xml feed的数据。
...
matches.Add(_item);
}
在此之后不久,我想只包括与where where子句匹配的项目
if (this.MatchType == FixtureType.Played)
{
matches = matches.ToList().Where(
m =>
m.matchResult == "D"
).ToObservableCollection();
}
在此之后如果我打开一个断点,我注意到匹配现在包含我正在寻找的项目。
现在的问题是,数据绑定到observablecollection的控件仍然有初步数据。
答案 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/)