具有多个级别的TreeView

时间:2016-01-20 19:50:54

标签: wpf treeview treeviewitem

以下代码

<TreeView Name="tree" ItemsSource="{Binding Path=AllNotes}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type m:Note}" ItemsSource="{Binding Path=ListIssuesType}">
            <TextBlock Text="{Binding Path=SoftwareVersion}" Margin="2" />
         </HierarchicalDataTemplate>

        <HierarchicalDataTemplate DataType="{x:Type m:IssueType}" ItemsSource="{Binding Path=IssueNames}">
            <TextBlock Text="{Binding Path=IssueTypeName}" Margin="2" />
        </HierarchicalDataTemplate>

        <DataTemplate DataType="{x:Type m:IssueType}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=IssueTypeName}" />                
            </StackPanel>
        </DataTemplate>
    </TreeView.Resources>
</TreeView>

我收到错误:

  

&#34;项目已添加。键入字典:&#39; DataTemplateKey(ReleaseNotes_Window.Models.IssueType)&#39;正在添加的密钥:&#39; DataTemplateKey(ReleaseNotes_Window.Models.IssueType)&#39;&#34;

1 个答案:

答案 0 :(得分:0)

当您将某些内容放入ResourceDictionary时,它需要一个明确的x:Key,否则该密钥将由应用于该类的DictionaryKeyPropertyAttribute确定。

对于DataTemplate,它是以下内容:

[DictionaryKeyProperty("DataTemplateKey")]
public class DataTemplate : FrameworkTemplate

这取决于DataType

因为你有:

<HierarchicalDataTemplate DataType="{x:Type m:IssueType}" ItemsSource="{Binding Path=IssueNames}">
    <TextBlock Text="{Binding Path=IssueTypeName}" Margin="2" />
</HierarchicalDataTemplate>

<DataTemplate DataType="{x:Type m:IssueType}">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Path=IssueTypeName}" />
    </StackPanel>
</DataTemplate>

两者都有DataType="{x:Type m:IssueType}",这就是程序失败的原因。

为其中一个x:Key使用额外的DataTemplate,并将其作为StaticResource引用,并计划在其中使用它。