2016-05-15 45 views
0

我有一個項目集合,其中包含兩個集合(其中任何一個可以爲空):的TreeView HierarchicalDataTemplates的多個集合型

class Project { 
    public string Name { get; set; } 
    public int Priority { get; set; } 
    public List<Project> Projects { get; set; } 
    public List<Task> Tasks { get; set; } 
} 

我可以嵌套項目顯示:

<TreeView x:Name="ProjectsTree" > 
<TreeViewItem Header="Projects" 
       ItemsSource="{Binding ProjectsCollection, Mode=TwoWay}" 
       IsExpanded="True" > 
    <TreeViewItem.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type local:Project}" ItemsSource="{Binding Projects}"> 
      <TextBlock Text="{Binding Name}"></TextBlock> 
     </HierarchicalDataTemplate> 
    </TreeViewItem.Resources> 
</TreeViewItem> 

如何爲任務添加第二個模板?如果我想補充:

<HierarchicalDataTemplate DataType="{x:Type local:Project}" ItemsSource="{Binding Tasks}"> 
      <TextBlock Text="{Binding Name}"></TextBlock> 
     </HierarchicalDataTemplate> 

我得到一個錯誤,對那裏已經是在資源字典數據類型「項目」(或類似的東西)的條目。

所有幫助將不勝感激......

+0

這看起來前途無量 - http://stackoverflow.com/questions/3673173/ wpf-treeview-databinding -hierarchal-data-with-mixed-types - 但我無法弄清楚如何讓它在我的情況下工作。 – Number8

回答

0

假設:Project,並給出不能改變。這意味着在MVVM Project的背景下是模型。您現在可以創建一個連接視圖和模型的視圖模型。它看起來是這樣的:

public class ProjectViewModel 
{ 
    public Project Project { get; set; } 

    public string Name 
    { 
     get 
     { 
      return Project.Name; 
     } 
    } 

    public int Priority 
    { 
     get 
     { 
      return Project.Priority; 
     } 
    } 

    public IList Children 
    { 
     get 
     { 
      if (Project.Projects.Count > 0) 
      { 
       return Project.Projects; 
      } 

      return Project.Tasks; 
     } 
    } 
} 

然後你適應模板向視圖模型和你做:

<TreeView x:Name="ProjectsTree" > 
     <TreeViewItem Header="Projects" 
      ItemsSource="{Binding ProjectsViewModelCollection, Mode=TwoWay}" 
      IsExpanded="True" > 
      <TreeViewItem.Resources> 
       <HierarchicalDataTemplate DataType="{x:Type local:Project}" ItemsSource="{Binding Children}"> 
        <TextBlock Text="{Binding Name}"></TextBlock> 
       </HierarchicalDataTemplate> 
      </TreeViewItem.Resources> 
     </TreeViewItem> 
+0

謝謝!你的答案,結合這個問題的一些答案:http://stackoverflow.com/questions/1912481/wpf-treeview-hierarchicaldatatemplate-binding-to-object-with-multiple-child-co,幫助我得到它的工作。 – Number8