【问题标题】:TreeView HierarchicalDataTemplates for more than one collection typeTreeView HierarchicalDataTemplates 用于多个集合类型
【发布时间】:2016-05-15 20:51:31
【问题描述】:

我有一个 Projects 集合,其中包含两个集合(其中任何一个都可以为空):

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>  

我收到一条错误消息,指出资源字典中已经存在数据类型“Project”(或类似的)的条目。

所有帮助将不胜感激...

【问题讨论】:

标签: c# wpf treeview hierarchicaldatatemplate


【解决方案1】:

假设: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>

【讨论】:

猜你喜欢
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2017-02-22
  • 2014-12-31
相关资源
最近更新 更多