Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在TreeView层次结构的同一级别上拥有不同的类吗?_C#_Wpf_Treeview - Fatal编程技术网

C# 我可以在TreeView层次结构的同一级别上拥有不同的类吗?

C# 我可以在TreeView层次结构的同一级别上拥有不同的类吗?,c#,wpf,treeview,C#,Wpf,Treeview,我有一个要在WPF树视图中显示的类的层次结构 任务 人 项目 日子 这些类包括字符串属性和集合属性。看起来是这样的: 洗衣房 约翰 物品收集 衣裳 洗衣粉 收集天数 星期天 星期四 购物 米莉 项目 钱 名单 袋子 汽车 日子 星期六 我希望将字符串(Person)显示为叶子,并能够深入到集合(项目、天数)中,以访问其中的字符串 我发现这一解释适用于此布局: 任务 人 项目 日子 但是我不知道如何调整它以在同一层次上表示不同的类。感谢所有的帮助

我有一个要在WPF树视图中显示的类的层次结构

  • 任务
    • 项目
    • 日子
这些类包括字符串属性和集合属性。看起来是这样的:

  • 洗衣房

    • 约翰
    • 物品收集
      • 衣裳
      • 洗衣粉
    • 收集天数
      • 星期天
      • 星期四
  • 购物

    • 米莉
    • 项目
      • 名单
      • 袋子
      • 汽车
    • 日子
      • 星期六
我希望将字符串(Person)显示为叶子,并能够深入到集合(项目、天数)中,以访问其中的字符串

我发现这一解释适用于此布局:

  • 任务
      • 项目
        • 日子

但是我不知道如何调整它以在同一层次上表示不同的类。感谢所有的帮助,尤其是一个例子。

我想我已经解决了。如果有比这更明智的方法,请告诉我

这篇博文帮了大忙,但不幸的是,代码中充满了拼写错误:

关键是绑定到TreeView的每个类都是从基类派生的。这允许您通过将不同类型绑定到它们的基类集合,从而将不同类型绑定到TreeView中。然后在XAML中,您可以为每种数据类型创建HierarchycalDataTemplate,一切正常

<Window x:Class="HierarchicalDataTemplateAndTreeView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:HierarchicalDataTemplateAndTreeView"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>

        <HierarchicalDataTemplate DataType="{x:Type local:Task}" ItemsSource="{Binding Path=Children}">
            <StackPanel Orientation="Horizontal" Margin="3">
                <TextBlock Text="{Binding Path=Name}" FontSize="16" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:Person}" ItemsSource="{Binding Path=Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" Foreground="Purple" FontSize="14" FontWeight="Bold" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:ItemCollection}" ItemsSource="{Binding Path=Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" Foreground="Blue" FontSize="12" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:Item}" ItemsSource="{Binding Path=Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" Foreground="Blue" FontSize="11" FontStyle="Italic" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:DayCollection}" ItemsSource="{Binding Path=Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" Foreground="RosyBrown" FontSize="12" />
            </StackPanel>
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type local:Day}" ItemsSource="{Binding Path=Children}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" Foreground="RosyBrown" FontSize="12" FontStyle="Italic" />
            </StackPanel>
        </HierarchicalDataTemplate>

    </Window.Resources>
    <StackPanel>
        <TreeView Name="treeView"/>
    </StackPanel>
</Window>



使用System.Collections.Generic;
使用System.Windows;
使用System.Windows.Documents;
命名空间层次结构DataTemplateandTreeView
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
treeView.ItemsSource=GetData();
}
公共列表GetData()
{
列表=新列表()
{
新任务
{ 
Name=“洗衣房”,Children=新列表()
{
新人{Name=“John”},
新项目集合
{ 
Name=“Items”,Children=新列表()
{
新项目{Name=“衣服”},
新项目{Name=“洗衣粉”}
}
},
新日精选
{
Name=“Days”,Children=新列表()
{
新的一天{Name=“Sunday”},
新的一天{Name=“星期四”}
}
}
}
},
新任务
{ 
Name=“购物”,Children=新列表()
{
新人{Name=“Millie”},
新项目集合
{ 
Name=“Items”,Children=新列表()
{
新项目{Name=“Money”},
新项目{Name=“List”},
新项目{Name=“Bags”}
}
},
新日精选
{
Name=“Days”,Children=新列表()
{
新的一天{Name=“星期六”}
}
}
}
}
};
退货清单;
}
}
}

使用System.Collections.Generic;
命名空间层次结构DataTemplateandTreeView
{
公共类复合
{
公共字符串名称{get;set;}
公共列表子项{get;set;}
}
公共类任务:复合
{
}
公众人士:综合
{
}
公共类ItemCollection:复合
{
}
公共类项目:复合
{
}
公共类DayCollection:复合
{
}
公众上课日:综合
{
}
}

在我看来很明智
using System.Collections.Generic;
using System.Windows;
using System.Windows.Documents;

namespace HierarchicalDataTemplateAndTreeView
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            treeView.ItemsSource = GetData();
        }

        public List<Composite> GetData()
        {
            List<Composite> list = new List<Composite>()
            {
                new Task
                { 
                    Name = "Laundry", Children = new List<Composite>()
                    {
                        new Person { Name = "John" },
                        new ItemCollection
                        { 
                            Name = "Items", Children = new List<Composite>()
                            {
                                new Item { Name = "Clothes" },
                                new Item { Name = "Washing Powder" }
                            }
                        },

                        new DayCollection
                        {
                            Name = "Days", Children = new List<Composite>()
                            {
                                new Day { Name = "Sunday" },
                                new Day { Name = "Thursday" }
                            }
                        }
                    }
                },

                new Task
                { 
                    Name = "Shopping", Children = new List<Composite>()
                    {
                        new Person { Name = "Millie" },
                        new ItemCollection
                        { 
                            Name = "Items", Children = new List<Composite>()
                            {
                                new Item { Name = "Money" },
                                new Item { Name = "List" },
                                new Item { Name = "Bags" }
                            }
                        },

                        new DayCollection
                        {
                            Name = "Days", Children = new List<Composite>()
                            {
                                new Day { Name = "Saturday" }
                            }
                        }
                    }
                }
            };

            return list;
        }
    }
}
using System.Collections.Generic;

namespace HierarchicalDataTemplateAndTreeView
{
    public class Composite
    {
        public string Name { get; set; }
        public List<Composite> Children { get; set; }
    }

    public class Task: Composite
    {
    }

    public class Person : Composite
    {
    }

    public class ItemCollection : Composite
    {
    }

    public class Item : Composite
    {
    }

    public class DayCollection : Composite
    {
    }

    public class Day : Composite
    {
    }
}