2010-04-02 4 views
3

Je cherche une méthode de gestion des barres d'outils (et des menus) avec mvvm dans WPF. Envisagez une interface utilisateur avec des espaces de travail à onglets et un contenu hétérogène (comme Visual Studio). Là, les barres d'outils doivent être cachées ou visibles en fonction de l'onglet actif. Comment concevez-vous le viewmodel view pour les barres d'outils?Comment gérer les barres d'outils avec mvvm et WPF

J'utiliserais une collection de toolbar-viewmodels et lierais la ToolbarTray, mais ce n'est pas possible.

Toutes les recommandations sont appréciées. Les liens vers des échantillons, des documents sur les meilleures pratiques, etc. sont les bienvenus.

Répondre

1

J'ai eu ce même problème dans une de mes applications récemment. J'utilisais un ruban comme ma barre d'outils principale, et selon le module sélectionné, les boutons du ruban devaient être cachés ou montrés. J'ai trouvé deux solutions différentes ... j'espère que l'on travaillera pour vous. La première solution serait de créer une région dans le shell de votre application (cela peut être un Grid/Canvas/quelquechose) et de charger dynamiquement la barre d'outils désirée dans cette région en fonction de l'onglet sur lequel l'utilisateur clique. En d'autres termes, si vous avez 5 onglets différents qui nécessitent leur propre barre d'outils, créez 5 UserControls qui contiennent une barre d'outils et chargez la correcte dans la région lorsque l'utilisateur clique sur l'onglet. Ensuite, vous voulez répondre à l'événement lorsque l'utilisateur clique sur un bouton dans la barre d'outils. Dans ma solution, j'ai utilisé l'approche Mediator pour permettre à ViewModels de communiquer entre eux. Cela fonctionne, mais je ne sais pas que je le ferais à nouveau de cette façon ... CAL est probablement la meilleure approche.

L'autre solution consisterait à créer une barre d'outils avec tous les boutons requis et à lier leur visibilité au ViewModel. En fonction de la sélection de l'utilisateur, définissez la visibilité des contrôles en fonction de vos besoins. J'espère que l'une de ces solutions fonctionne pour vous.

au fait ... de quelle partie de l'Allemagne venez-vous? Je connaissais un homme avec le nom de famille de Stoll, donc je n'étais pas sûr si c'était un nom commun ou pas ...

+0

J'ai fait quelque chose de similaire à votre première solution, mais en utilisant un seul UserControl. Principalement, j'ai essayé d'utiliser DataTemplates avec DataType pour sélectionner la vue ToolBar, mais je n'ai pas résolu cela, donc j'ai fini par utiliser le même UserControl pour chaque barre d'outils. Les éléments sont liés aux données. Donc, cela fonctionne très bien, mais n'est pas aussi flexible que votre solution. En ce qui concerne le problème de visibilité, j'ai utilisé une approche similaire. Cela peut facilement être encapsulé dans une classe avec les méthodes Merge/Unmerge. Je viens du Bade-Wurtemberg. Mais le nom vient de Thuringe, il y a quelques générations. –