Привет У меня есть древовидная структура для отображения некоторых иерархических данных. Мои классы были следующими:ИерархияDataTemplate для добавления смешанных данных в treeview
public class Response
{
public string UserId { get; set; }
public CaseItems Cases { get; set; }
}
public class CaseItem
{
public int ID { get; set; }
public string Name { get; set; }
public CaseFolders Folders { get; set; }
}
public class CaseFolder
{
public int FolderID { get; set; }
public string FolderName { get; set; }
public CaseItem Case { get; set; }
public CaseFolders Folders { get; set; }
}
public class CaseItems : List<CaseItem> { };
public class CaseFolders : List<CaseFolder> { };
public class Responses : List<Response> { };
Я создал некоторые тестовые данные, используя эти классы.
Responses ResponseList = new Responses();
Response response = new Response();
response.Cases = new CaseItems();
response.UserId = "USER 0001";
ResponseList.Add(response);
CaseItem Case = new CaseItem();
Case.Folders = new CaseFolders();
Case.Name = "CASE0001";
Case.ID = 1;
response.Cases.Add(Case);
CaseFolder MainFolder = new CaseFolder();
MainFolder.FolderID = 1;
MainFolder.FolderName = "Case Folder";
MainFolder.Folders = new CaseFolders();
MainFolder.Case = Case;
Case.Folders.Add(MainFolder);
CaseFolder SubFolder = new CaseFolder();
SubFolder.FolderID = 2;
SubFolder.FolderName = "Sub Folder";
SubFolder.Case = Case;
MainFolder.Folders.Add(SubFolder);
Response AnotherResponse = new Response();
AnotherResponse.Cases = new CaseItems();
AnotherResponse.Cases.Add(Case);
AnotherResponse.UserId = "USER 0002";
ResponseList.Add(AnotherResponse);
tvTest.DataContext = ResponseList;
Часть XAML выглядит следующим образом
<TreeView Name="tvTest"
ItemsSource="{Binding}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Response}"
ItemsSource="{Binding}">
<Label Content="{Binding UserId}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:CaseItem}"
ItemsSource="{Binding Cases}">
<Label Content="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:CaseFolder}"
ItemsSource="{Binding ????}">
<Label Content="{Binding Path=FolderName}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Проблема в том, я не в состоянии отобразить данные вплоть до последнего суб уровне папок. Я видел много вопросов в wpf, но большинство из них имеют одинаковые классы в коллекции или вложенных коллекциях того же типа.
Возможно, я не могу изменить классы, чтобы возвращать CompositeCollection, так как я получаю данные с уровня данных.
Я смотрю на структуру как
User0001
Case0001
Main Folder
Sub Folder
sub...etc...
User0002
etc....
выше XAML, только показывает мне UserId из Resonse класса.
вау! который работал как шарман. Не могли бы вы объяснить мне, что вы сделали. Я изо дня в день боролся за эту работу. –
Ваш первый шаблон предназначен для первого уровня и, следовательно, для создания второго уровня, он должен иметь ItemsSource как Случаи и аналогичные для Case элементы. Папки - это ItemsSource и т. Д. – Nitin