TreeView项中的字符串数组

时间:2016-02-17 19:40:54

标签: c# wpf treeview

我有一个TreeView绑定到ObservableCollection个项目,定义如下(为完整性而提供的完整示例View Model):

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。我希望避免创建另一个类来保存数组中的每个字符串。

1 个答案:

答案 0 :(得分:0)

这就是你要找的东西:

<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

然后我们用DataTemplate定义孩子的样子。我们不需要另一个HierarchicalDataTemplate,因为我们只有两个级别。