gpt4 book ai didi

silverlight - 当 ObservableCollection 更改 WP7 时更新 CollectionViewSource

转载 作者:行者123 更新时间:2023-11-30 23:51:02 26 4
gpt4 key购买 nike

我有一个 ObservableCollection对于我的基本项目列表。我有 2 CollectionViewSource这是数据的不同过滤器。我希望发生的任何更改都反射(reflect)在 CollectionViewSource 中。 .

在我的 View 模型构造函数中,我设置了过滤谓词。然后我获取数据并将其添加到 ObservableCollection .我订阅了 CollectionChanged事件,并在那里刷新 CVS。

不过,我看到了一些非常奇怪的事情。要么这些项目没有出现在我的 ListBox 中绑定(bind)到 CVS,否则将显示重复项。如果我调用 RefreshCollectionChanged 之外的 CVS 上我更改 ObservableCollection 后的事件,一切似乎都很好。我真的希望能够在集合更改时刷新,而不必担心每次完成更改它的操作时都必须调用刷新。

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();
}

最佳答案

CollectionViewSource未实现 INotifyPropertyChanged ,因此要将任何基础数据更改到 UI 中,您需要调用 Refresh在 View 上,就像你已经在做的那样。 CollectionViewSource也是数据源不可知的,因此源是 ObservableCollection 的事实引发属性更改通知无关紧要,因为 CollectionViewSource没有在听。

我认为您在集合更改时手动刷新 View 的解决方案是您将获得的最佳解决方案,而无需重新考虑您的数据结构。

关于silverlight - 当 ObservableCollection 更改 WP7 时更新 CollectionViewSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5678501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com