【发布时间】:2020-05-15 21:07:36
【问题描述】:
我的基本项目列表有一个ObservableCollection。我有 2 个CollectionViewSource 是不同的数据过滤器。我希望发生的任何更改都反映在 CollectionViewSource 中。
在我的视图模型构造函数中,我设置了过滤谓词。然后我获取数据并将其添加到ObservableCollection。我订阅了CollectionChanged 事件,并正在那里刷新 CVS。
不过,我看到了一些非常奇怪的事情。要么这些项目没有出现在我绑定到 CVS 的 ListBox 中,要么出现重复项。如果我在更改ObservableCollection 之后在CollectionChanged 事件之外的CVS 上调用Refresh,一切似乎都正常。我真的希望能够在集合更改时刷新,而不必担心每次完成更改它时都必须调用刷新。
public MyViewModel()
{
oc.CollectionChanged += OcCollectionChanged;
cvs1.Source = oc;
cvs1.View.Filter = new Predicate<object>( ... );
cvs2.Source = oc;
cvs2.View.Filter = new Predicate<object>( ... );
foreach( var data in myData )
{
oc.Add( data );
}
}
private void OcCollectionChanged( object sender, NotifyCollectionChangedEventArgs e )
{
cvs1.View.Refresh();
cvs2.View.Refresh();
}
【问题讨论】:
标签: silverlight windows-phone-7