c# - 仅在 Datagrid WPF C# 中显示项目的子集
问题描述
所以这不是一个真正的问题,而是我过去 3 天遇到的问题的解决方案,欢迎任何改进。所以我有一个显示所选产品的数据网格,每个产品还可以有称为成分的子项,这些成分应该添加到集合中但不显示给用户。
我为此提出的解决方案如下。注释掉的 where 子句是我的第一次尝试。
public ObservableCollection<ProductSaleTransaction> gProductSale = new ObservableCollection<ProductSaleTransaction>();
public ObservableCollection<ProductSaleTransaction> ProductSaleCollection
{
get { return gProductSale/*.Where(s => s.category != "Ingredients").ToObservableCollection<ProductSaleTransaction>()*/; }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
dgProductTchSale.ItemsSource = ProductSaleCollection;
ProductSaleCollection.CollectionChanged += ProductSaleCollection_CollectionChanged;
}
private void ProductSaleCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
ICollectionView view = CollectionViewSource.GetDefaultView(ProductSaleCollection);
view.Filter = new Predicate<object>(filterIngredient);
}
public bool filterIngredient(object item)
{
var vaitem = (ProductSaleTransaction)item;
if (vaitem == null)
return false;
else
{
bool it = false;
it = vaitem.category != "Ingredient";
return it;
}
}
这导致添加到集合中的所有项目,但只有不在成分类别中的项目显示给用户。
这就是我想出的解决项目的自动过滤问题,我想用所有下游代码保存到数据库中,但不向用户显示它们。
解决方案
ICollectionView
当其基础集合添加/删除项目时,过滤器会自动评估。因此,您无需在ICollectionView
每次集合更改时都创建一个新的。
而是移动线条
ICollectionView view = CollectionViewSource.GetDefaultView(ProductSaleCollection);
view.Filter = new Predicate<object>(filterIngredient);
到Window_Loaded
自己并删除ProductSaleCollection_CollectionChanged
事件。
推荐阅读
- javascript - 时区信息格式不正确
- css - 图像渲染:清晰的边缘和平滑值在 Chrome 中报告无效的属性值
- android - Kotlin Spinner OnItemSelected 意图
- javascript - 在提交表单时,我收到错误“方法不允许”-Javascript
- google-apps-script - 使用谷歌应用脚本在网络上发布谷歌演示文档
- javascript - 从 API 访问数据
- c# - 在 C# 中,TCP 服务器不会向客户端发送超过 1 个文件
- javascript - 如何循环遍历具有键和关联数组的对象并根据另一个数组中的值存在来过滤数组
- javascript - 如何将函数作为参数传递给其他函数以避免重复代码
- apache-spark - 如何使用 replaceWhere 子句实现以下火花行为