WPF Treeview绑定到多个嵌套列表

WPF Treeview绑定到多个嵌套列表,wpf,recursion,treeview,datatemplate,Wpf,Recursion,Treeview,Datatemplate,我有下面的递归数据结构,我想将其绑定到树视图。但我无法确定如何指定我的数据模板/分层数据模板 public class MediaContent { public MediaContent() { this.Sequences = new List<MediaSequence>(); this.Items = new List<MediaItem>(); } public List<MediaSequ

我有下面的递归数据结构,我想将其绑定到树视图。但我无法确定如何指定我的数据模板/分层数据模板

public class MediaContent
{
    public MediaContent()
    {
        this.Sequences = new List<MediaSequence>();
        this.Items = new List<MediaItem>();
    }

    public List<MediaSequence> Sequences
    {
        get;
        set;
    }

    public List<MediaItem> Items
    {
        get;
        set;
    }        
}

public class MediaSequence
{
    public MediaSequence()
    {
        this.Sequences = new List<MediaSequence>();
        this.Items = new List<MediaItem>();
    }

    public List<MediaSequence> Sequences
    {
        get;
        set;
    }

    public List<MediaItem> Items
    {
        get;
        set;
    }
}

public class MediaItem
{
    public string Filename
    {
        get;
        set;
    }
}
那么,如何在WPF树视图中显示这些数据呢

<TreeView Margin="5" VerticalAlignment="Top" Grid.Row="1" ItemsSource="{Binding Media}">

我已经尝试了下面的方法,但显然您不能为同一数据类型指定两个不同的模板

<HierarchicalDataTemplate DataType="{x:Type local:MediaSequence}" ItemsSource="{Binding Sequences}">
    <TextBlock Text="sequence" />
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type local:MediaSequence}" ItemsSource="{Binding Items}">
    <TextBlock Text="item" />
</HierarchicalDataTemplate>


感谢您的帮助,好的,让我们先从最简单的事情入手,这应该有助于理清您的思路。它可能看起来不像这样,但你并没有得到比我们通常看到的普通文件夹和文件继承人更复杂的东西

所以如果我们先从树的末端开始,我们可以定义

<DataTemplate DataType="{x:Type local:MediaItem}">
  <TextBlock Text="item" />
</DataTemplate>
这样我们就可以定义另一个模板

<HierarchicalDataTemplate DataType="{x:Type local:MediaSequence}" ItemsSource="{Binding Children}">
  <TextBlock Text="sequence" />
</HierarchicalDataTemplate>

好吧,让我们先从最简单的事情入手,这应该有助于理清你的思路。它可能看起来不像这样,但你并没有得到比我们通常看到的普通文件夹和文件继承人更复杂的东西

所以如果我们先从树的末端开始,我们可以定义

<DataTemplate DataType="{x:Type local:MediaItem}">
  <TextBlock Text="item" />
</DataTemplate>
这样我们就可以定义另一个模板

<HierarchicalDataTemplate DataType="{x:Type local:MediaSequence}" ItemsSource="{Binding Children}">
  <TextBlock Text="sequence" />
</HierarchicalDataTemplate>

您将拥有MediaSequence或MediaItem类型的树,但不能在树中同时拥有这两种类型的树。如果使用TemplateSelector,是否可行???您将拥有MediaSequence或MediaItem类型的树,但无法在树中同时拥有这两种类型的树。如果使用TemplateSelector,是否可行???这非常有用,非常感谢。我只需更改children属性,首先将每个列表强制转换为IMedia,然后再调用concat方法,否则它将无法编译。我当然可以将我的列表更改为IMedia类型,但我更喜欢显式的类型。这非常有效,非常感谢。我只需更改children属性,首先将每个列表强制转换为IMedia,然后再调用concat方法,否则它将无法编译。我当然可以将列表更改为IMedia类型,但我更喜欢显式类型。
public class MediaContent : MediaSequence
{
   ...
}