尝试构建一个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中有另一个数据绑定控件,如果有,怎么做?
答案 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>