Non esiste alcun modo per filtrare direttamente la raccolta nell'associazione. Tuttavia, WPF consente di filtrare (e ordinare e raggruppare) raccolte con CollectionViewSource
.
Un approccio potrebbe essere quello di definire un CollectionViewSource
nelle risorse del vostro ItemTemplate
che filtra la ItemsSource
un ottenere il numero di elementi che passano il filtro legandosi alla proprietà Count di questo CollectionViewSource
. Devi definire il tuo filtro in codebehind, però. Sarebbe simile a questa:
<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>
E nel codebehind:
private void FilteredItems_OnFilter(object sender, FilterEventArgs e)
{
var item = sender as Item;
e.Accepted = item.IsSelected;
}
non ho ancora testato, ma dovrebbe funzionare in generale. Non si sa mai con WPF, anche se ...
Stai utilizzando MVVM? – DHN
In effetti, sono DHN. –
Puoi postare ViewModels o le classi associate al controllo TreeView – Jehof