1

Je travaille avec le CTP Juillet '09 des services .Net RIA, et lier un objet d'objets Group => Department => Category à une arborescence, puis avoir un rendu de structure hiérarchique chacun des trois types d'objets. Mon but final est d'activer la fonctionnalité glisser-déposer pour pouvoir modifier rapidement ma liste de groupes => départements => catégories, et modifier leurs relations respectives de manière plus intuitive que était précédemment disponible.Conserver TreeView Subtree développé après l'actualisation de l'ensemble de données

Mon problème actuel est que lorsque je fais la commande drop, et soumets les changements qui doivent être soumis au contexte de données, ma vue arborescente se redessine, et réduit les feuilles. Existe-t-il une méthode par laquelle je peux utiliser pour éviter l'effondrement?

Répondre

0

Je n'ai pas fait beaucoup de travail sur Silverlight, mais d'après ce que j'ai vu, il y a un modèle d'objet assez limité, donc certains des événements/propriétés/méthodes pour le faire peuvent ne pas être là. Mais vous pouvez essayer de sauver/restaurer l'état vous ... quelque chose de semblable au pseudo-code suivant:

private expandeds as collection(); 

tree.OnNodeExpand() { 
    expandeds.add(tree.CurrentNode.key); 
} 

tree.OnNodeCollapse() { 
    expandeds.remove(tree.CurrentNode.key); 
} 

tree.AfterBind() { 
    for each key in expandeds { 
     tree.FindNodeByKey(key).expanded = true; 
    } 
} 
3

Je souhaite publier cette réponse uniquement pour ceux qui trébuchent sur ce fil à la recherche d'une réponse. (A été fait dans SL4)

vous avez besoin de 2 listes:

  1. un pour contenir les données reçues du service (appelé SourceList)
  2. un pour contenir les entrées racine pour afficher (DisplayList) auquel votre treeView est lié.

Vous devez également vous assurer que LoadBehaviour est défini sur Fusionner dans votre opération de chargement. par exemple:

domainContext.Load(domainContext.GetEntityQuery(), LoadBehavior.MergeIntoCurrent, CallbackFunction, userState); 

donc tout ce qui reste maintenant est d'appeler votre domainContext.Load après chaque mise à jour et dans votre callbackFunction remplacer votre SourceList avec la nouvelle liste des entités renvoyées par le service Web. Étant donné que les entrées d'exploration de votre liste d'affichage reposent sur l'association et le modèle de données hiérarchique, elles doivent toujours être développées sur l'entrée qui vient d'être modifiée.

Remarque Si vous reconstruisez la liste DisplayList à partir de zéro, la vue arborescente redessinerait évidemment \ collapse.

Espérons que cela aide quelqu'un. Jan

Questions connexes