Элемент TreeView - Иерархический шаблон данных - PullRequest
2 голосов
/ 18 мая 2011

Для сценария - В организации, имеющей разные отделы, в каждом отделе разные сотрудники, шаблон иерархических данных работает отлично.

Как насчет сценария, подобного Вопросному документу (родительский кластер), в котором есть как дочерние кластеры (группа элементов вопросов), так и элементы вопросов. Вроде как:

Билогия (родительский кластер)

  • Группа 1 (Дочерний кластер)
    • Вопрос 1 (Вопрос)
    • Вопрос 2 (Вопрос)
  • Группа 2 (Дочерняя группа)
    • Подгруппа 1 (Дочерняя группа)
    • Вопрос 1 (Вопрос)
    • Вопрос 2 (Вопрос)

Здесь у меня есть две сущности - группа и вопрос. Кластер может содержать список кластеров, а также список элементов ответов.

По сути, проблема заключается в том, что один и тот же шаблон иерархических данных для кластера должен быть связан с двумя источниками элементов, один для дочерних кластеров и один для вопросов. Есть ли способ использовать шаблон иерархических данных в этом случае, чтобы я мог использовать древовидное представление для этого.

Я использую SIlverlight 4.0.

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Да, вы должны быть в состоянии достичь этого с HeirarchicalDataTemplates.

Вы можете создать HeirarchicalDataTemplates для ParentCluster, ChildCluster, а затем использовать обычный DataTemplate для вопроса.

 <HierarchicalDataTemplate DataType="{x:Type ParentClusterViewModel}" ItemsSource="{Binding ChildItems}">
    <ParentClusterView />
</HierarchicalDataTemplate>

<HierarchicalDataTemplate DataType="{x:Type ChildClusterViewModel}" ItemsSource="{Binding ChildItems}">
    <ChildClusterView />
</HierarchicalDataTemplate>

Если у вас естьБазовый класс TreeItemBase, от которого наследуются все ваши ViewModels, вы сможете делать то, что хотите.

public abstract class TreeItemBase
{
    public List<TreeItemBase> ChildItems { get; set; }
}  

public class ParentClusterViewModel : TreeItemBase { ... }
public class ChildClusterViewModel : TreeItemBase { ... }
public class QuestionViewModel : TreeItemBase { ... }
1 голос
/ 18 мая 2011

Нашел решение для этого. В основном и Cluster, и QuestionItem являются типом WorkItem. Я абстрагировал их для WorkItem и использовал совокупность workitem в кластере, которая возвращает комбинированный список QuestionItems и sub-кластеров. В TemplateSelector переопределите SelectTemplate для предоставления Иерархического шаблона данных / шаблона данных на основе типа рабочего элемента.

...