我的视图模型中有 3 个 cascading ICollectionView
,其中一个依赖于另一个。第一个不绑定到视图上的控件,而是用作两个即将出现的作为主细节显示给用户的键过滤器。
我的问题是,我将过滤谓词附加到主集合视图,但是当我Refresh
从它调用时,它根本不会进入过滤器。我什至尝试从过滤谓词中抛出一个异常,所以如果调试器无法访问该代码,我仍然会看到它到达,但没有抛出异常。
我调用 Refresh 的原因是什么,但它没有带我进入过滤谓词 - 这意味着它没有重新创建视图?
我的视图模型中有 3 个 cascading ICollectionView
,其中一个依赖于另一个。第一个不绑定到视图上的控件,而是用作两个即将出现的作为主细节显示给用户的键过滤器。
我的问题是,我将过滤谓词附加到主集合视图,但是当我Refresh
从它调用时,它根本不会进入过滤器。我什至尝试从过滤谓词中抛出一个异常,所以如果调试器无法访问该代码,我仍然会看到它到达,但没有抛出异常。
我调用 Refresh 的原因是什么,但它没有带我进入过滤谓词 - 这意味着它没有重新创建视图?
我找到了一个可行的解决方法,但我不喜欢它。
我正在做的是Filter
再次重置属性,这可以完成工作。
我在 Reflector 中四处游荡,试图找到我遗漏的东西,但并没有取得很大的成功来澄清什么是怪癖。
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<Product>
,返回一个 Linq 查询。
在不知道为什么刷新不起作用的情况下,但是在其他集合视图(绑定到 UI)上,刷新确实起作用,因此,linq 过滤器IEnumerable<Product>
完成了这项工作。