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

时间:2014-03-11 17:17:15

标签: c# wpf combobox

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

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

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

非常感谢任何帮助,提前谢谢。

2 个答案:

答案 0 :(得分:2)

您必须使用与CollectionViewSource.GetDefaultView()相关联的ItemsSourceICollectionView将始终返回与您的源集合相关的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; } } 属性绑定,这对您的绑定来说是唯一的。

这样的事情:

{{1}}

答案 1 :(得分:1)

Aaaaand当然在发布问题后2分钟我已经撞了一个多小时,我自己想出来了。

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