我目前有一个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容器提供。我使用它来创建在上面XAML中的其他ObservableCollections
。
目前,我正试图在选择ComboBox
中的项目时设置我的ViewModelRepository
中每个SomeItemViewModel
的Visibility
属性。这似乎对树中第一级以下的任何内容都有效,但对于第二级本身(第一级始终可见)则无效。
然而,它并不总是有效。当我应用“筛选”时,正确的节点会被设置为不可见,但如果我展开包含“已筛选”节点的节点,则任何随后的“筛选”都将失败。
我已经阅读了关于将ItemsControls
绑定到CollectionViewSource
以进行筛选的文章,但我找不到它与TreeView
的使用示例。有人可以为我指点如何在这里使用它吗?