将多个combobox绑定到同一个集合,但只过滤一个
本文关键字:过滤 一个 集合 combobox 绑定 同一个 | 更新日期: 2023-09-27 17:49:28
我有一个自定义控件SearchableComboBox,它继承自ComboBox。它只是在items控件上方有一个文本框,用来过滤可见的项目,目前通过设置items . filter .
我的表单上有多个searchablecombobox都绑定到同一个集合。我希望它们是独立可搜索的,但是我现在有东西连接的方式,如果我过滤一个,那么它们都被过滤(如果一个已经有一个选择不匹配过滤器,它的选择被清除)。
我还尝试添加一个UnfilteredItems属性到SearchableComboBox,绑定到它,然后使用从UnfilteredItems创建的CollectionView作为ItemsSource,然后通过CollectionView进行过滤。这提供了完全相同的功能,其中所有的searchablecombobox都被过滤在一起。
任何帮助都是非常感激的,提前感谢。
您必须使用与您的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都独立于其他的过滤器