2012-06-12 47 views
2

在我的應用程序中,每次treeView加載它的項目時我都會收到這個錯誤。這個錯誤使我的應用程序加載速度變慢,至少需要兩分鐘才能加載。WPF treeview ItemTemplate和ItemTemplateSelector被忽略

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

我對樹狀XAML代碼是:(我用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(中TreeViewItem)是從數據庫中填充的。

我已經在谷歌搜索答案,但到目前爲止,我一直沒能找到它!有誰知道如何解決這個問題?

預先感謝任何幫助

回答

5

而是在您的視圖模型創建TreeViewItems的列表,創建一個簡單的描述,你要顯示的數據對象的列表,即使它是作爲

一樣簡單
class Item 
{ 
    public string Header { get;set; } 
} 

TreeViewItem已經有一個與之關聯的模板。

+2

我同意安迪,看看這篇文章 - [通過使用ViewModel模式簡化WPF TreeView](http://www.codeproject.com/Articles/26288/Simplifying-the -WPF-TreeView的逐使用叔he-ViewMode) – akjoshi

3

你是已經是UI元素的綁定元素(這裏是:TreeViewItems)。通常你將任何對象綁定到你的itemsSource和ItemsContainerGenerator,然後爲每個綁定項目創建TreeViewItems。

這不能在你的情況下完成,你已經有TreeViewItems,因此模板不能被應用,這就是爲什麼你會得到這個錯誤信息。

你可以解決這個問題是這樣的:

一)綁定數據對象到你的樹,而不是TreeViewItems,他們將被自動創建

二)直接分配你的風格的treeviewItems你已經有

另請參閱link

+0

關於A選項,你說我要將屬性PostcodeLijst從ObservableCollection(TreeViewItem)更改爲其他內容?!我沒有明白這一點:P – Rui

+0

我的意思是說,PostcodeLijst不應該是一個ObservableCollection ,而應該是一個簡單的數據表示,例如ObservableCollection 。在您當前的實現中,您的ViewModel知道PostCodes顯示爲TreeViewItems。但那不是它的工作(順便說一句,不是MVVM)。如果你想改變你的樹到其他類似listview的東西呢?我建議的選項a)與用戶「Andy」在他的文章中已經提出的完全相同,我非常贊同。 – SvenG