我有一个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。我希望避免创建另一个类来保存数组中的每个字符串。
答案 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>
我们将HierarchicalDataTemplate
与ItemsSource
绑定到每个节点的Tasks
属性。
我们定义每个根节点应该使用显示每个项目的TextBlock
属性的Name
。
然后我们用DataTemplate
定义孩子的样子。我们不需要另一个HierarchicalDataTemplate
,因为我们只有两个级别。