В настоящее время у меня есть TreeView, который имеет следующую структуру:
<TreeView ItemsSource="{Binding RootViewModels}"
FontSize="12">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="local:TreeViewItemBehaviour.IsBroughtIntoViewWhenSelected"
Value="True" />
<Setter Property="IsExpanded"
Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected"
Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="Visibility"
Value="{Binding IsVisible, Mode=TwoWay, Converter={StaticResource boolVisibilityConverter}}" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding SomeDisplayText}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
, где RootViewModels
и Children
имеют тип ObservableCollection<SomeItemViewModel>
В том же представлении у меня естьComboBox
и я хочу, чтобы выбранный элемент в этом ComboBox
служил критерием для фильтрации TreeView
по.У меня есть ViewModelRepository, который также имеет тип ObservableCollection<SomeItemViewModel>
и предоставляется моим контейнером IoC.Я использую это для создания моих других ObservableCollections, которые находятся в XAML выше.
В данный момент я пытаюсь установить Visibility
каждого SomeItemViewModel в моем ViewModelRepository, когда выбран элемент в ComboBox.Похоже, что это работает для всего, что находится ниже двух первых уровней в дереве, но не для самого 2-го уровня (первый уровень - это корень, который всегда видим).
Однако он не работает согласованно.Когда я применяю «фильтр», правильные узлы становятся невидимыми, но если я затем расширяю узел, который содержит «фильтрованные» узлы, то все последующие «фильтры» дают сбой.
Я читал о привязке ItemsControls кCollectionViewSource для фильтрации, но я не могу найти пример его использования с TreeView.У кого-нибудь есть указания на то, как я могу использовать его здесь?