TreeView 项目中的字符串数组

String array in TreeView item

我有一个 TreeView 绑定到 ObservableCollection 个项目,定义如下(为完整性提供了完整示例视图模型):

using System.Collections.ObjectModel;

namespace ViewModels
{
    public class MainViewModel()
    {
        public ObservableCollection<CustomTask> SavedTasks { get; } = new ObservableCollection<CustomTask>();

        public MainViewModel() {}
    }

    public class CustomTask
    {
        public string DisplayName { get; private set; }
        public string Name { get; private set; }
        public string[] Tasks { get; private set; }

        public CustomTask(string dispName, string name, string[] tasks)
        {
            DisplayName = dispName;
            Name = name;
            Tasks = tasks;
        }
    }
}

我试图在树视图中显示每个 CustomTask 对象,其 Tasks 属性 是树视图中的子项。我已经阅读了一些在线教程等,但无法显示字符串。这是我目前的XAML:

<TreeView ItemsSource="{Binding SavedTasks}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type common:CustomTask}" ItemsSource="{Binding SavedTasks}">
            <TextBlock Text="{Binding Path=Name}" />
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate DataType="{x:Type sys:String}" ItemsSource="{Binding Tasks}">
                    <TextBlock Text="{Binding}" />
                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

我不确定如何处理第二个 DataTemplate。我希望避免创建另一个 class 来保存数组中的每个字符串。

这就是您要查找的内容:

<TreeView ItemsSource="{Binding SavedTasks}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type local:CustomTask}" ItemsSource="{Binding Tasks}">
            <TextBlock Text="{Binding Path=Name}" />
            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate DataType="{x:Type sys:String}">
                    <TextBlock Text="{Binding}" />
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

我们添加 HierarchicalDataTemplateItemsSource 绑定到每个节点的 Tasks 属性。

我们定义每个根节点应该使用一个TextBlock显示每个项目的Name 属性.

然后我们定义 children 与 DataTemplate 的外观。我们不需要另一个 HierarchicalDataTemplate,因为我们只有两个级别。