HierarchicalDataTemplate仅绑定具有属性的数据

时间:2019-04-24 11:51:35

标签: c# wpf

我有一个树状视图,想绑定具有IsFolder = true值的类

我尝试使用

设置样式
identity

但遗憾的是,这仍然会创建一个Listview项

节点类

<Window.Resources>
    <Style x:Key="HideElement" TargetType="{x:Type TextBlock}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsFolder}" Value="false">
                <Setter Property="Visibility" Value="Hidden"/>
                <Setter Property="Width" Value="0"/>
                <Setter Property="Height" Value="0"/>
                <Setter Property="FontSize" Value="1"/>
                <Setter Property="Opacity" Value="0"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<TreeView Name="FolderTree" Grid.Column="0" SelectedItemChanged="FolderTree_SelectedItemChanged" >

    <TreeView.Resources>

        <HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Nodes}">
            <TextBlock Text="{Binding Name}" Style="{StaticResource HideElement}"/>

        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

我希望它仅显示具有IsFolder == true的结果,并且我不想为那些具有IsFolder == false的元素显示不可见元素

1 个答案:

答案 0 :(得分:0)

为什么不绑定到另一个过滤源?

public class Node
{
    public Node()
    {
        Nodes = new ObservableCollection<Node>();
    }
    public bool IsFolder { get; set; }
    public string Name { get; set; }
    public ObservableCollection<Node> Nodes { get; set; }
    public ObservableCollection<Node> Folders { get; set; }

    public void Add(Node node)
    {
        Nodes.Add(node);
        if (node.IsFolder)
            Folders.Add(node);
    }

    public void Remove(Node node)
    {
        Nodes.Remove(node);
        if (node.IsFolder)
            Folders.Remove(node);
    }
}

然后绑定到文件夹而不是节点。