Nie ma możliwości bezpośredniego przefiltrowania kolekcji w powiązaniu. Jednak WPF umożliwia filtrowanie (i sortowanie i grupowanie) kolekcji za pomocą CollectionViewSource
.
Jedno podejście byłoby zdefiniować CollectionViewSource
w zasobach swojej ItemTemplate
który filtruje ItemsSource
uzyskać liczbę elementów, które przechodzą przez filtr wiążący do właściwości Count tej CollectionViewSource
. Musisz jednak zdefiniować swój filtr w kodzie źródłowym. Będzie wyglądać mniej więcej tak:
<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>
A w kodzie:
private void FilteredItems_OnFilter(object sender, FilterEventArgs e)
{
var item = sender as Item;
e.Accepted = item.IsSelected;
}
nie testowałem go, ale to powinno działać w ogóle. Nigdy nie wiadomo, z WPF, choć ...
Czy używasz MVVM? – DHN
W rzeczywistości jestem DHN. –
Czy możesz opublikować swoje ViewModels lub klasy, które są powiązane z TreeView – Jehof