我想根据ListBox
的{{1}}属性对IsSelected
应用过滤器。
此刻我有这样的事情。
的 XAML
CheckBox
代码隐藏
<CheckBox Name="_filterCheckBox" Content="Filter list" Checked="ApplyFilterHandler"/>
<ListBox ItemsSource="{Binding SomeItems}" />
它可以工作,但这个解决方案感觉就像老式的方式(Windows Forms)。
问题:
是否可以通过BAM绑定/在XAML中实现这一目标?
感谢您的时间。
答案 0 :(得分:0)
我能想到的唯一方法是在XAML中创建ObjectDataProvider
和两个单独的CollectionViewSource
对象。一个视图将应用过滤器,另一个视图不应用。然后,您可以直接绑定到CheckBox.IsChecked
属性并使用自定义IValueConverter
。值转换器将具有2个依赖项属性 - 类型CollectionViewSource.
可以调用这些属性,“ UnfilteredItems ”和“ FilteredItems ”。在XAML中,您可以将未过滤的项属性设置为未过滤的CollectionViewSource
,将过滤的项属性设置为带过滤器的属性。转换器逻辑本身很简单 - 如果为true,则返回已过滤的CollectionViewSource
,如果为false,则返回未过滤的。{/ p>
这个解决方案并不是非常优雅,但它可以完成工作。因为Filter
不是DependencyProperty
并且只能由事件处理程序指定,所以我们的手与此相关。不过,我不认为你的解决方案是坏的。