我现在有一个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
我想让选中的项目
作为筛选
TreeView
可观察集合<SomeItemViewModel>
由我的IoC容器提供。我使用这个来创建位于上面XAML中的其他可观察集合。
目前,我正试图设置
Visibility
当组合框中的项被选中时,我的ViewModelRepository中的每个SomeItemViewModel。这似乎适用于树中前两个级别以下的任何内容,但不适用于第二个级别本身(第一个级别是始终可见的根)。
然而,它并不能始终如一地工作。当我应用“filter”时,正确的节点被设置为不可见,但是如果我随后展开一个包含“filtered”节点的节点,则任何后续的“filter”都将失败。