2016-02-17 2 views
0

У меня есть TreeView, связанный с ObservableCollection элементов, определяемый как таковые (полный примера Посмотреть модели, представленные для полноты):массива строк в пункте TreeView

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

Это то, что вы ищете:

<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, потому что у нас есть только два уровня.