WPF:在布尔属性上绑定/应用过滤器

时间:2010-04-22 18:31:21

标签: wpf xaml binding filter collectionviewsource

我想根据ListBox的{​​{1}}属性对IsSelected应用过滤器。

此刻我有这样的事情。
XAML

CheckBox

代码隐藏

<CheckBox Name="_filterCheckBox" Content="Filter list" Checked="ApplyFilterHandler"/>
<ListBox ItemsSource="{Binding SomeItems}" />

它可以工作,但这个解决方案感觉就像老式的方式(Windows Forms)。

问题:
是否可以通过BAM绑定/在XAML中实现这一目标?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我能想到的唯一方法是在XAML中创建ObjectDataProvider和两个单独的CollectionViewSource对象。一个视图将应用过滤器,另一个视图不应用。然后,您可以直接绑定到CheckBox.IsChecked属性并使用自定义IValueConverter。值转换器将具有2个依赖项属性 - 类型CollectionViewSource.可以调用这些属性,“ UnfilteredItems ”和“ FilteredItems ”。在XAML中,您可以将未过滤的项属性设置为未过滤的CollectionViewSource,将过滤的项属性设置为带过滤器的属性。转换器逻辑本身很简单 - 如果为true,则返回已过滤的CollectionViewSource,如果为false,则返回未过滤的。{/ p>

这个解决方案并不是非常优雅,但它可以完成工作。因为Filter不是DependencyProperty并且只能由事件处理程序指定,所以我们的手与此相关。不过,我不认为你的解决方案是坏的。