HierarchicalDataTemplate Привязывать только данные, имеющие свойство - PullRequest
1 голос
/ 24 апреля 2019

У меня есть древовидное представление, и я хочу связать класс со значением IsFolder = true

Я попытался установить стиль с помощью

<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>

но, к сожалению, это все равно создает элемент списка

Класс узла

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; }
}

Я хочу, чтобы отображались только результаты с IsFolder == true, и я не хочу иметь невидимые элементы для элементов с IsFolder == false

1 Ответ

0 голосов
/ 24 апреля 2019

Почему бы не выполнить привязку к другому отфильтрованному источнику?

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);
    }
}

А затем вы привязываетесь к папкам, а не к узлам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...