我有非常大的ObservableCollection<MyItem>,我需要提供用户友好的过滤。
public static async Task RefilterViewAsync(this ItemsControl @this, Predicate<object> compareLogic)
{
await Task.Run(
() =>
{
var collectionView = CollectionViewSource.GetDefaultView(@this.ItemsSource);
if (collectionView.CanFilter)
{
collectionView.Filter = compareLogic;
}
else throw new InvalidOperationException("Filtering not supported...");
collectionView.Refresh();
});
}..the问题是由于某些原因,上面的代码不能工作。在用户界面线程上开机大约需要1分钟.任何如何实现异步过滤的想法,至少能够显示一些“处理.”动画帮助用户克服这一点吗?
发布于 2016-01-29 18:38:29
如果您有一个庞大的ObservableCollection,并且希望异步地过滤掉它,那么您自己去做。不支持异步绑定AFAIK。
我的意思是创建另一个类型为ObservableCollection的属性;这将是您经过筛选的集合。与其绑定实际的集合,不如将筛选的集合绑定到ItemsControl。
然后异步实现自己的过滤逻辑(可能在另一个线程中),最后设置筛选集合属性。绑定引擎将相应地启动并更新UI。我之前在我的一个项目中成功地使用了这个。
https://stackoverflow.com/questions/35091268
复制相似问题