WPF树视图ItemTemplate和ItemTemplateSelector被忽略

时间:2012-06-12 08:28:04

标签: wpf vb.net treeview itemtemplate itemtemplateselector

在我的应用程序中,每次treeView加载它的项目时,我都会收到此错误。此错误使我的应用程序在加载时变慢,并且至少需要两分钟才能加载。

错误是:System.Windows.Data Error: 26 : ItemTemplate and ItemTemplateSelector are ignored for items already of the ItemsControl's container type; Type='TreeViewItem'

我对树视图的xaml代码是:(我在我的ViewModel上使用VB.net)

<TreeView ScrollViewer.VerticalScrollBarVisibility="Hidden" 
          ItemContainerStyle="{DynamicResource tviStyle}" 
          Background="#FFF0F0F0" BorderBrush="#FFE5E2DB" 
          IsEnabled="{Binding isTreeEnable}" 
          ItemsSource="{Binding PostcodeLijst}" 
          Margin="0" Name="dgStamOverzichtPostcode" />

ItemsSource的绑定是一个ObservableCollection(Of TreeViewItem),它是从数据库中填充的。

我已经在谷歌寻找答案,但到目前为止我一直无法找到它!有谁知道如何解决这个问题?

提前感谢您提供任何帮助

2 个答案:

答案 0 :(得分:4)

不是在视图模型中创建TreeViewItems列表,而是创建一个简单描述要显示的数据的对象列表,即使它只是像

那样简单。
class Item
{
   public string Header { get;set; }
}

TreeViewItem已经有一个与之关联的模板。

答案 1 :(得分:3)

您是已经是UI元素的绑定元素(此处为:TreeViewItems)。通常,您将任何对象绑定到itemsSource,然后ItemsContainerGenerator为每个绑定项创建TreeViewItem。

在您的情况下无法完成此操作,您已经拥有TreeViewItems,因此无法应用模板,这就是您收到此错误消息的原因。

你可以这样解决:

a)将DataObjects绑定到Tree,而不是TreeViewItems,它们将自动创建

b)将你的风格直接分配给你已经拥有的treeviewItem

另见link