2010-02-04 7 views
1

Je développe une application de bureau wpf avec un modèle MVVM strict.
mon application actuelle est en train de faire les choses suivantes:Dans wpf treeview, comment redessiner les nœuds avec leurs valeurs étendues précédentes (en utilisant MVVM)

  • Affichage d'un TreeView avec HierarchicalDataTemplate.
  • L'utilisateur peut développer ou réduire les nœuds.
  • L'utilisateur peut ajouter de nouveaux noeuds (glisser-déposer + double-clic).
  • Chaque fois qu'un nouveau nœud est ajouté, Model est mis à jour et Treeview est recréé en fonction du modèle.
  • Étant donné que Treeview est recréé, tous les nœuds sont affichés comme étendus après l'ajout de nœuds.

Je veux montrer des noeuds avec leur état antérieur élargi. Y at-il un moyen de le faire en utilisant MVVM? Ce que j'ai pensé jusqu'à présent est

  • modèle ne doit pas contenir de données relatives à la façon de dessiner l'interface utilisateur ??
  • VM devrait juste obtenir des données à partir du modèle et le mettre dans l'interface utilisateur (et passer la date de l'interface utilisateur au modèle) ??

Merci pour votre avis. Je suis peut-être loin du rail. Mais je veux juste avoir de la sagesse de votre part.

Merci
Paija

Répondre

1

Une solution ce que je pense pourrait être est d'arrêter la récréation de l'arbre, juste mettre à jour le modèle et ajouter uniquement nodeitems au nœud actuel où vous les laissez tomber. Juste actualiser les collections dans le modèle et ne pas actualiser l'arbre. Faites-nous savoir si cela ne convient pas à votre architecte.

Merci, Jagdev Josan

+0

Nous vous remercions de votre suggestion. Oui, je pense que c'est l'un des moyens. Mais je me demandais juste si c'est la bonne façon? Ce qui m'embête, c'est qu'il peut y avoir une certaine discordance dans Model et UI à un moment donné. Est-ce la tendance générale que tout le monde suit? Ou est ce scénario pas si général. Merci. – Sant

+0

il n'y aura pas de discordance, parce que les deux seront liés ensemble. l'interface utilisateur représentera parfaitement votre modèle de vue. ils resteront synchronisés. –

2

Si vous n'avez pas déjà fait, lisez ce grand article de Josh Smith: Simplifying the WPF TreeView by Using the ViewModel Pattern

Fondamentalement, ce qu'il suggère, il est d'inclure une propriété appelée IsExpanded dans votre VM et se lient le TreeView correctement pour que l'état étendu/réduit soit entièrement contrôlé par le programmeur.

+0

Merci Aviad, J'ai vu l'article. Je suppose que faire quelque chose de similaire est une option viable ... Merci beaucoup. – Sant

0

Le modèle de vue peut contenir des informations liées à la vue, c'est ce à quoi il sert. C'est un pont entre le business pur et la vision pure. Mes modèles de vue exposent généralement quelques propriétés métier d'un objet et ajoutent quelques propriétés de vue associées. Si tout ce dont vous avez besoin, ce sont les propriétés métier, puis liez directement à la couche de gestion. C'est seulement quand vous avez besoin de faire quelque chose comme votre situation ici que vous avez besoin d'un modèle de vue. Si vous souhaitez recréer complètement l'arborescence (ce qui semble fou), vous pouvez stocker l'état étendu des nœuds dans votre modèle de vue et les lier aux éléments de la vue arborescente à l'aide d'un objet ItemsContainerStyle. De cette façon, lorsque vous recréerez votre arborescence, vos nœuds précédemment développés seront encore développés. Ainsi, vos objets métier enveloppés contiendront une propriété supplémentaire IsExpanded que vous pouvez utiliser pour restaurer votre état d'arborescence.

P.s. Ai-je mentionné son un peu au-dessus pour recréer la vue de l'arbre?

+0

Merci pour votre avis réfléchi. Donc, il semble que l'opinion générale est comme [jagdev josan], mettre à jour Model et Treeview séparément. Je peux comprendre pourquoi vous détestez l'idée de "recréer la vue de l'arbre" !! Merci. – Sant

Questions connexes