2 votes

TreeView Item - Modèle de données hiérarchiques

Pour le scénario - Une organisation ayant différents départements, chaque département ayant différents employés, le modèle de données hiérarchiques fonctionne parfaitement.

Que diriez-vous d'un scénario tel que le questionnaire (cluster parent) ayant à la fois des clusters enfants (groupe d'éléments de question) et des éléments de question. Comme suit :

Bilogy (Groupement de parents)

  • Groupe 1 (cluster enfant)
    • Question 1(Question Item)
    • Question 2(Question Item)
  • Groupe 2 (groupe d'enfants)
    • Sous-groupe 1(Cluster enfant)
    • Question 1(Question Item)
    • Question 2(Question Item)

Ici, j'ai deux entités - Cluster et Question Item. Le cluster peut contenir une liste de clusters ainsi qu'une liste d'éléments de réponse.

Le problème vient du fait que le même modèle de données hiérarchiques pour le cluster doit être lié à deux sources d'éléments, une pour les clusters enfants et une pour les éléments de la question. Existe-t-il un moyen d'utiliser un modèle de données hiérarchique dans ce cas, afin que je puisse utiliser une vue arborescente pour cela ?

J'utilise SIlverlight 4.0.

2voto

Jon Mitchell Points 1391

Oui, vous devriez être en mesure de réaliser cela avec HeirarchicalDataTemplates .

Vous pouvez soit créer un HeirarchicalDataTemplates pour le ParentCluster, le ChildCluster et ensuite utiliser un normal DataTemplate pour la question.

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

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

Si vous disposez ensuite d'une classe de base "TreeItemBase" dont héritent tous vos modèles de vues d'arbres, vous pourrez faire ce que vous voulez.

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

public class ParentClusterViewModel : TreeItemBase { ... }
public class ChildClusterViewModel : TreeItemBase { ... }
public class QuestionViewModel : TreeItemBase { ... }

1voto

Chinjoo Points 1488

J'ai trouvé une solution à ce problème. En fait, les Clusters et les QuestionItems sont des types de WorkItem. Je les ai abstraits en WorkItem et j'ai utilisé une collection de workitem dans le cluster qui retourne une liste combinée de QuestionItems et de sous clusters. Dans le TemplateSelector, j'ai surchargé SelectTemplate pour fournir le modèle de données hiérarchiques/le modèle de données basé sur le type de WorkItem.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X