gpt4 book ai didi

wpf - 将集合绑定(bind)到 ItemsSource 时如何过滤集合?

转载 作者:行者123 更新时间:2023-12-03 01:55:07 24 4
gpt4 key购买 nike

我创建了一个 TreeView ,它对硬盘驱动器上的目录和文件进行建模。每个 treeviewItem 都有一个复选框,绑定(bind)到 isSelected 属性。我想要实现的是为每个父节点显示所选文件的数量占总文件数的比例(10/12 10 个文件,总共选择了 12 个文件)。

有没有办法与属性 is ... 进行绑定(bind)?

<ContentPresenter Content="{Binding MyItems.Count where MyItems.IsSelected, Mode=OneTime}"
Margin="2,0" />

最佳答案

无法直接过滤绑定(bind)中的集合。但是,WPF 允许使用 CollectionViewSource 过滤(以及排序和分组)集合。

一种方法是在 ItemTemplate 的资源中定义一个 CollectionViewSource,它会过滤 ItemsSource 并获取通过的元素数量通过绑定(bind)到此 CollectionViewSource 的 Count 属性来过滤。不过,您必须在代码隐藏中定义过滤器。看起来像这样:

<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 = e.Item as Item;
e.Accepted = item.IsSelected;
}

我还没有测试过它,但它通常应该可以工作。不过,你永远不会知道 WPF...

关于wpf - 将集合绑定(bind)到 ItemsSource 时如何过滤集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16076453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com