我有一个自定义控件SearchableComboBox,它继承自ComboBox。它只是在items控件上方有一个文本框,用于过滤可见项目,目前通过设置Items.Filter。
我的表单上有多个SearchableComboBox都绑定到同一个集合。我希望它们可以独立搜索,但是我现在连接的方式,如果我过滤掉一个然后它们都被过滤掉(如果有一个选择已经不匹配过滤器,它的选择被清除)。
我还尝试将UnfilteredItems属性添加到SearchableComboBox,绑定到该属性,然后使用从UnfilteredItems创建的CollectionView作为ItemsSource,然后通过CollectionView进行过滤。这提供了完全相同的功能,其中所有SearchableComboBox都被一起过滤。
非常感谢任何帮助,提前谢谢。
答案 0 :(得分:2)
您必须使用与CollectionViewSource.GetDefaultView()
相关联的ItemsSource
,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;
}
}
属性绑定,这对您的绑定来说是唯一的。
这样的事情:
{{1}}
答案 1 :(得分:1)
Aaaaand当然在发布问题后2分钟我已经撞了一个多小时,我自己想出来了。
我通过在源集合上调用CollectionViewSource.GetDefaultView来创建CollectionView,它似乎为所有SearchableComboBox返回相同的引用。如果我实例化一个新的CollectionViewSource,将它的Source属性设置为源集合,然后将我的ItemsSource设置为CollectionViewSource.View属性,这现在可以正常工作,并且每个SearchableComboBox都可以独立于其他属性进行过滤。