将数据绑定控件嵌套在WPF TreeView中

时间:2015-11-26 12:03:12

标签: c# wpf treeview

尝试构建一个WPF TreeView控件,它可以在其中包含另一个数据绑定控件。这是XAML:

<TreeView temsSource="{Binding DocumentCategories}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding DocumentCategory1}">
            <TextBlock FontWeight="Bold" Text="{Binding Description}"></TextBlock>

            <HierarchicalDataTemplate.ItemTemplate>
                <DataTemplate>
                    <ListView ItemsSource="{Binding Documents}">
                        <TextBlock FontWeight="Bold" Text="{Binding Name}"></TextBlock>
                    </ListView>
                </DataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>

        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

DocumentCategories数据是递归的 - 列表中的每个项目都有DocumentCategory的DocumentCategory1集合,它有自己的DocumentCategory1集合等等。

里面没有ListView,这很好用。但是,当您添加ListView时,TreeView呈现正常但当您尝试打开其中一个节点时,应用程序崩溃并显示错误:

  

使用ItemsSource时,操作无效。访问和修改   而使用ItemsControl.ItemsSource的元素

我不完全确定这是指哪个ItemsSource-- TreeView或ListView的。我假设后者,并且问题是由于直到节点打开之后绑定实际上没有发生的事实。

我已经尝试将DocumentCateegories和Documents from List更改为ObservableCollection,这似乎是此错误的常见修复 - 但它仍然表现相同。

是否有可能在TreeView中有另一个数据绑定控件,如果有,怎么做?

1 个答案:

答案 0 :(得分:1)

缺少ListView的DataTemplate。

目前,以下元素被解释为实际的ListView元素:

<TextBlock FontWeight="Bold" Text="{Binding Name}"></TextBlock>

当你已经绑定了ListView的ItemSource时,当视图试图将“TextBlock”添加为ListView的项目时,会发生错误。

只需将其更改为以下内容:

<ListView ItemsSource="{Binding Documents}">
  <ListView.ItemTemplate>
    <DataTemplate>
      <TextBlock FontWeight="Bold" Text="{Binding Name}"></TextBlock>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>