树视图“在使用 ItemsSource 之前,项目集合必须为空

本文关键字:集合 项目 之前 ItemsSource 视图 在使用 | 更新日期: 2023-09-27 18:31:08

如果我在没有<DataTemplate>的情况下使用以下代码,它正在工作,并且我只能看到SoftwareVersion,当我添加时<DataTemple>抛出异常。知道为什么吗?

ObservableCollection<Note> AllNotes

<TreeView Name="tree" ItemsSource="{Binding Path=AllNotes}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate DataType="{x:Type m:Note}" ItemsSource="{Binding Path=ListIssuesType}">
            <TextBlock Text="{Binding Path=SoftwareVersion}" Margin="2" />
         </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
   <DataTemplate DataType="{x:Type m:IssueType}">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Path=IssueTypeName}" />
        </StackPanel>
    </DataTemplate>
</TreeView>

树视图“在使用 ItemsSource 之前,项目集合必须为空

完全不清楚为什么要向控件添加DataTemplate。但是很明显为什么你会得到异常:你已经添加了DataTemplate对象作为TreeView的直接子对象,这使它成为Items集合中的一个项目。它的"模板"性质变得完全无关紧要;您告诉控件仅将该对象作为元素包含在视图中。

当然,现在Items集合是非空的,因此不允许发送ItemsSource属性。

因此,异常的解决方法是"不要这样做"。 即停止尝试使DataTemplate元素成为树视图的项目列表中的项目。

除此之外,您的问题中没有足够的上下文来说明您应该如何使用DataTemplate对象。假定您打算将其用作树视图中实际数据项的模板的一部分;也许它需要以某种方式合并到HierarchicalDataTemplate中。

但是,如果没有更多关于代码现在做什么以及您希望它做什么的细节,以及您提供一个很好的最小、完整和可验证的示例来清楚地说明您的场景,我看不到解决这部分问题的好方法。如果您在定义数据模板方面仍需要帮助,请发布一个新问题,以提供必要的详细信息。