没有办法直接过滤绑定中的集合。但是,WPF 允许使用CollectionViewSource
.
一种方法是在您的过滤器CollectionViewSource
的资源中定义 a通过绑定到 this 的 Count 属性来获取通过过滤器的元素的数量。不过,您必须在代码隐藏中定义您的过滤器。看起来像这样:ItemTemplate
ItemsSource
CollectionViewSource
<TreeView x:Name="Tree" ItemsSource="{Binding Items}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding ChildItems}">
<HierarchicalDataTemplate.Resources>
<CollectionViewSource x:Key="FilteredItems"
Source="{Binding ChildItems}"
Filter="FilteredItems_OnFilter" />
</HierarchicalDataTemplate.Resources>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{} {0} of {1} selected">
<Binding Path="Count" Source="{StaticResource FilteredItems}" />
<Binding Path="ItemsSource.Count" ElementName="Tree" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
在代码隐藏中:
private void FilteredItems_OnFilter(object sender, FilterEventArgs e)
{
var item = sender as Item;
e.Accepted = item.IsSelected;
}
我还没有测试过它,但它应该可以正常工作。但是,您永远不会知道 WPF...