Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf ICollectionView.Refresh不';不要重新过滤收集的内容_Wpf_Filter_Icollectionview_Collectionview - Fatal编程技术网

Wpf ICollectionView.Refresh不';不要重新过滤收集的内容

Wpf ICollectionView.Refresh不';不要重新过滤收集的内容,wpf,filter,icollectionview,collectionview,Wpf,Filter,Icollectionview,Collectionview,我的视图模型中有3个级联的ICollectionViews,其中一个依赖于另一个。 第一个选项并没有绑定到视图上的控件,而是用作两个后续选项的关键过滤器,这两个选项将作为主细节显示给用户 我的问题是,我在主集合视图中附加了一个过滤器谓词,但是当我从中调用Refresh时,它根本不会进入过滤器。我甚至尝试从过滤器谓词中抛出异常,以便在调试器无法访问该代码的情况下,我仍然可以看到它到达,但没有抛出异常 我调用Refresh而不使用过滤器谓词的原因是什么?这意味着它没有重新创建视图?我找到了一个可行的

我的视图模型中有3个级联的
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过滤器执行此任务