如果集合包含某些需要隐藏的项,则 WPF 中 ListBox 的替代样式无法按预期工作

本文关键字:样式 ListBox 工作 WPF 包含某 集合 隐藏 如果 | 更新日期: 2023-09-27 18:33:48

我正在尝试将我的集合绑定到列表框。该集合包含一些要隐藏的项目,这些项目将根据某些条件显示。但是当我这样做时,替代样式没有正确应用。

例如:情况1:在所有项目都可见的地方,我得到这样的输出:项目1(灰色)项目2(白色)项目3(灰色)项目4(白色)项目5(灰色)项目6(白色)项目7(灰色)

案例 2:在隐藏 Item2 的地方,我得到的输出为:项目1(灰色)项目3(灰色)项目4(白色)项目5(灰色)项目6(白色)项目7(灰色)

如何在不重新绑定集合的情况下解决此问题?

如果集合包含某些需要隐藏的项,则 WPF 中 ListBox 的替代样式无法按预期工作

与其隐藏项(大概在ListBoxItem控件模板或ListBox ItemTemplate中),不如使用CollectionViewSource来筛选它们。

这是因为这些项目在技术上仍然存在 - 您无法看到它们,但列表框可以看到。

有关筛选的详细信息,请参阅此链接。http://wpftutorial.net/DataViews.html

若要筛选集合视图,可以定义一个回调方法 确定项目是否应为视图的一部分。那个方法 应具有以下签名:布尔过滤器(对象项)。现在设置 该方法对 Filter 属性的委托 收藏视图,你就完成了。

ICollectionView _customerView = CollectionViewSource.GetDefaultView(customers);
_customerView.Filter = CustomerFilter
private bool CustomerFilter(object item)
{
    Customer customer = item as Customer;
    return customer.Name.Contains( _filterString );
}