以下代码
<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;
答案 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
引用,并计划在其中使用它。