WPF 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 для дерева: (я использую 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), который заполняется из базы данных.
Я посмотрел в Google для ответа, но до сих пор я не смог найти его! Кто-нибудь знает, как это исправить?
Заранее благодарю за любую помощь
2 ответа
Вместо создания списка TreeViewItems в вашей модели представления, создайте список объектов, которые просто описывают данные, которые вы хотите показать, даже если это так просто, как
class Item
{
public string Header { get;set; }
}
TreeViewItem уже имеет шаблон, связанный с ним.
Вы связываете элементы, которые уже являются элементами пользовательского интерфейса (здесь: TreeViewItems). Обычно вы привязываете любые объекты к вашему itemsSource, а ItemsContainerGenerator затем создает TreeViewItems для каждого связанного элемента.
Это не может быть сделано в вашем случае, у вас уже есть TreeViewItems, поэтому шаблоны не могут быть применены, и именно поэтому вы получаете это сообщение об ошибке.
Вы можете решить это следующим образом:
a) Свяжите объекты DataObject с вашим деревом, а не с TreeViewItems, они будут созданы автоматически
б) присвойте свои стили непосредственно древовидным элементам, которые у вас уже есть
Смотрите также эту ссылку