将多个combobox绑定到同一个集合,但只过滤一个

本文关键字:过滤 一个 集合 combobox 绑定 同一个 | 更新日期: 2023-09-27 17:49:28

我有一个自定义控件SearchableComboBox,它继承自ComboBox。它只是在items控件上方有一个文本框,用来过滤可见的项目,目前通过设置items . filter .

我的表单上有多个searchablecombobox都绑定到同一个集合。我希望它们是独立可搜索的,但是我现在有东西连接的方式,如果我过滤一个,那么它们都被过滤(如果一个已经有一个选择不匹配过滤器,它的选择被清除)。

我还尝试添加一个UnfilteredItems属性到SearchableComboBox,绑定到它,然后使用从UnfilteredItems创建的CollectionView作为ItemsSource,然后通过CollectionView进行过滤。这提供了完全相同的功能,其中所有的searchablecombobox都被过滤在一起。

任何帮助都是非常感激的,提前感谢。

将多个combobox绑定到同一个集合,但只过滤一个

您必须使用与您的ItemsSource相关联的CollectionViewSource.GetDefaultView(),它将始终返回与您的源集合相关的ICollectionView的相同实例。

创建新的CollectionViewSource并绑定它的View属性,这将是您绑定的唯一属性。

像这样:

private ICollectionView customView;
public ICollectionView CustomView
{
   get
   {
      if (customView== null)
      {
         customView= new CollectionViewSource()
                     { Source = SourceCollection }.View;
         customView.Filter = p => !(p as CustomClass).BoolProperty;
      }
      return customView;
   }
 }

当然,在发布了这个问题2分钟后,我自己解决了这个问题。

我通过调用CollectionViewSource来创建CollectionView。GetDefaultView在源集合上,它似乎为所有searchablecombobox返回相同的引用。如果我实例化一个新的CollectionViewSource,将它的Source属性设置为源集合,然后将ItemsSource设置为CollectionViewSource。View属性,现在可以像我想的那样工作了,每个SearchableComboBox都独立于其他的过滤器