Я пытаюсь создать WPF TreeView
с тремя слоями. CountryReportTitle
- это свойство струны, а ArticleCategoryTitlesList
- это коллекция, выставленная с моего ViewModel
. Не существует иерархии классов. Это структура, я ищу:Простая структура вложенных TreeView Xaml?
Это моя попытка Xaml, но я получаю исключение в Xaml во время выполнения:
{"Item has already been added. Key in dictionary: 'DataTemplateKey(ISESApp.ViewModels.ReportViewModel)' Key being added: 'DataTemplateKey(ISESApp.ViewModels.ReportViewModel)'"}
Xaml:
<TreeView ItemsSource="{Binding CountryReportTitle}">
<TreeView ItemsSource="{Binding CountryReportTitle}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:ReportViewModel}"
ItemsSource="{Binding ArticleCategoryTitlesList}">
<TextBlock Text="{Binding CategoryTitle}" />
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:ReportViewModel}"
ItemsSource="{Binding ArticleCatagoryTypesList}">
<TextBlock Text="{Binding ArticleTitle}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="{x:Type local:ReportViewModel}">
<TextBlock Text="{Binding ArticleTitle}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
</TreeView>
Местное: это пространство для имени на моем ViewModel:
xmlns:local="clr-namespace:MyApp.ViewModels"
Что я делаю неправильно, что лучше всего подходит для этой проблемы?
Спасибо. Обе мои коллекции находятся в одном представленииModel. Я действительно не хочу разделяться на разные классы. Если да, то каким образом я могу определить DataType? – Hardgraf
@ Hardgraf Предположим, что ItemsB находится на ViewModel, а не в ItemA. Вам нужно будет привязать обратно к ViewModel в HierarchicalDataTemplate для ItemA - 'ItemsSource =" {Binding DataContext.ItemsB, ElementName = root} ", убедившись, что ваше окно« x: Name = »root» 'so что ElementName указывает на нужное место. – Will
думаю, что я почти там. Изменил вопрос на мой новый Xaml, но все еще не уверен, как ссылаться на правильные типы данных для каждого из моих HierarchicalDataTemplates. – Hardgraf