Fermer

août 15, 2019

Personnaliser l'affichage de votre Blazor TreeView avec des modèles


Bien que fonctionnel, l'affichage par défaut d'un nœud dans TreeView est constitué d'une seule ligne avec une icône et du texte. Dans ce blog, nous vous montrons comment obtenir l'affichage que vous voulez vraiment en créant votre propre modèle personnalisé.

Il n'y a rien d'anormal dans l'affichage par défaut d'un nœud dans un TreeView . Mais ce n’est qu’une simple ligne avec une icône et du texte. Si vous voulez faire plus, vous pouvez! Tout ce que vous avez à faire est d’emballer du balisage dans un élément pour obtenir l’affichage souhaité.

Dans un post précédent j’ai montré comment charger un TreeView avec objets extraits de Entity Framework (et avec un peu de LINQ). Ce que je n’ai pas expliqué, c’est comment gérer ce qui est affiché dans chacun de ses nœuds.

Par défaut, la TreeView affiche tout ce que vous avez dans la propriété Text de l’objet que vos nœuds TreeView représentent. Et, également par défaut, le nœud affichera l'icône ou l'image que vous spécifiez dans l'objet du nœud avec ce texte.

Mais si vous voulez quelque chose de plus (ou quelque chose de différent), vous pouvez l'avoir aussi: vous pouvez créer votre propre modèle personnalisé avec les données du nœud que vous souhaitez afficher (y compris différents modèles pour différents niveaux dans votre TreeView ). Une seule mise en garde: l'ajout d'un modèle supprime le comportement par défaut d'affichage d'un nœud. Si vous souhaitez afficher le texte ou l'icône du nœud, vous devez l'ajouter à votre modèle.

Un modèle de base

La création d'un modèle qui s'applique à chaque nœud est simple: dans l'élément ajoutez un élément et, en son sein, un élément (vous en avez probablement déjà déjà en place pour gérer la liaison des propriétés de votre objet au nœud de TreeView ). La création d'un modèle consiste simplement à ajouter un élément dans l'élément :


  
    
      
        
      
    
  

Dans l'élément vous pouvez indiquer la combinaison de balises et de texte à afficher pour le nœud. Vous pouvez accéder à l'objet associé au nœud à l'aide du mot clé context context (vous aurez besoin de transtyper le contexte en fonction du type de l'objet défini par TreeView .

Dans l’étude de cas que j’avais utilisée dans mon précédent post, j’ai affiché un objet OrgUnit dans chaque noeud de mon TreeView . Je pourrais donc créer un modèle d’élément qui saisit la propriété Name et l’affiche avec des balises:


   Département: 

@ ((contexte sous la forme OrgUnit) .Name)

Par le Ainsi, si vous n'êtes pas satisfait d'utiliser le contexte dans votre code, vous pouvez modifier ce nom à l'aide de l'attribut Contexte de l'élément . Pour cet exemple, je préférerais peut-être utiliser le nom de l'objet que le nœud affiche. Si tel est le cas, je pourrais reformuler mon exemple comme suit:


   Département: 

@ (OrgUnit en tant qu'OrgUnit) .Name

Au-delà de l'essentiel

Vous n'êtes pas limité à une seule ligne de texte dans votre modèle. : vous pouvez mettre autant de texte et de balisage que vous le souhaitez. Toutefois, si vous utilisez plusieurs lignes, il est judicieux de les insérer dans un élément

afin de vous assurer que vos noeuds s'affichent correctement. Voici un exemple qui affiche deux (2) propriétés de l'objet OrgUnit :


   
    Département:

@ ((contexte comme OrgUnit) .Name)


Manager:

@ ((contexte comme OrgUnit) .Manager)

Vous pouvez même insérer un bloc de code dans l'élément . peut simplifier votre code. Par exemple, si je réécris l'exemple précédent pour utiliser un bloc de code, je peux éviter de rediriger de manière répétée mon noeud vers un type OrgUnit (et de réduire le nombre de parenthèses requis):


   @ {
    OrgUnit ou = context as OrgUnit;
    
      Département:

@ ou.Name


Directeur:

@ ou.Manager

}

Rien ne vous empêche de lier le code JavaScript à un événement DOM déclenché par ces éléments. Vous pouvez également utiliser des composants dans l'interface utilisateur Telerik pour Blazor dans le modèle d'élément, par exemple un élément (bien que, pour le moment, il ne soit pas possible d'accéder aux informations relatives au noeud dont fait partie le bouton).

Différents modèles pour différents nœuds

En créant un élément comme je l'ai fait ici, vous avez effectivement créé un modèle "par défaut" qui s'applique à tous les nœuds. Mais vous ne souhaitez peut-être pas afficher le même modèle pour tous les nœuds de la TreeView .

Pour personnaliser le mode d'affichage de chaque nœud, vous pouvez créer des modèles supplémentaires et les lier à des niveaux spécifiques dans la . ] TreeView en ajoutant l’attribut Level à l’élément . Dans le TreeView le nœud le plus haut (ce que la documentation appelle le "nœud racine") est au niveau 0, les enfants immédiats de ce nœud sont au niveau 1, leurs enfants au niveau 2, etc. 19659004] Dans "l'organigramme" TreeView le nœud supérieur représente une société, les nœuds situés sous elle représentent les divisions et les nœuds situés sous les divisions représentent les départements. Comme il existe plus de départements que n'importe quel autre type d'unité organisationnelle, il est logique de définir un "modèle par défaut" pour prendre en charge l'affichage d'un département (comme je l'ai fait). Mais je peux aussi créer des modèles supplémentaires pour personnaliser l’affichage pour les deux niveaux supérieurs (société et division).

Si je le fais, un élément finirait par ressembler à quelque chose comme cela (alors que j’ai commandé modèles spécifiques au niveau dans cet exemple par numéro de niveau, cela n'est pas obligatoire):


  
    
       Département: 

@ ((contexte comme OrgUnit) .Name)

Société:

@ ((contexte comme OrgUnit ) .Name)

Division:

@ ((contexte: OrgUnit) .Name)

À vrai dire, vous pouvez maintenant faire afficher votre TreeView à votre guise. [19659004] Pour en savoir plus sur les composants de l'interface utilisateur Telerik pour Blazor et sur ce qu'ils peuvent faire, consultez notre page de démonstration Blazor ou téléchargez un essai pour commencer immédiatement à se développer!





Source link