Wpf ICollectionView.Refresh不';不要重新过滤收集的内容
我的视图模型中有3个级联的Wpf ICollectionView.Refresh不';不要重新过滤收集的内容,wpf,filter,icollectionview,collectionview,Wpf,Filter,Icollectionview,Collectionview,我的视图模型中有3个级联的ICollectionViews,其中一个依赖于另一个。 第一个选项并没有绑定到视图上的控件,而是用作两个后续选项的关键过滤器,这两个选项将作为主细节显示给用户 我的问题是,我在主集合视图中附加了一个过滤器谓词,但是当我从中调用Refresh时,它根本不会进入过滤器。我甚至尝试从过滤器谓词中抛出异常,以便在调试器无法访问该代码的情况下,我仍然可以看到它到达,但没有抛出异常 我调用Refresh而不使用过滤器谓词的原因是什么?这意味着它没有重新创建视图?我找到了一个可行的
ICollectionView
s,其中一个依赖于另一个。
第一个选项并没有绑定到视图上的控件,而是用作两个后续选项的关键过滤器,这两个选项将作为主细节显示给用户
我的问题是,我在主集合视图中附加了一个过滤器谓词,但是当我从中调用Refresh
时,它根本不会进入过滤器。我甚至尝试从过滤器谓词中抛出异常,以便在调试器无法访问该代码的情况下,我仍然可以看到它到达,但没有抛出异常
我调用Refresh而不使用过滤器谓词的原因是什么?这意味着它没有重新创建视图?我找到了一个可行的解决方法,但我不喜欢它 我要做的是再次重置
过滤器
属性,这就完成了任务。我在《反射器》中四处转悠,试图找出我遗漏了什么,但并没有很好地澄清其中的怪癖
private ICollectionView _Products;
public ICollectionView Products
{
get
{
if (_Products == null)
{
_Products =
CollectionViewSource.GetDefaultView(ProductsLibrary.SupportedProducts);
_Products.Filter = product => FilterProduct((Product)product);
}
return _Products;
}
}
private bool FilterProduct(Product product)
{
/**********************/
}
////////////////////
private void Search()
{
//Products.Refresh();
Products.Filter = product => FilterProduct((Product)product);
Categories.Refresh();
CategoryProducts.Refresh();
}
更新
我找到了一个更简单的解决方案
我将第一个ICollectionView
更改为一个简单的IEnumerable
,返回一个Linq查询
在不了解刷新不起作用的原因的情况下,但是在其他集合视图(绑定到UI)上,刷新确实起作用,因此,IEnumerable
的linq过滤器执行此任务