ContextMenu dans MVVM
Je veux lier un contextmenu à une liste de commandes.
<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding ItemContextCommands, Converter={StaticResource commandToStringConverter}}">
<ContextMenu.ItemTemplate >
<DataTemplate DataType="MenuItem">
<MenuItem Command="{Binding}"></MenuItem>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</Grid.ContextMenu>
La commandToStringConverter
simplement convertit une liste de commandes à une liste de chaînes de caractères à l'appel de la ToString()
sur chaque commande dans la liste.
Comment puis-je obtenir que les Command
dans chaque MenuItem
est appelé?
Vous probabbly devriez penser à utiliser un autre encore convertisseur qui convertit tous les {Binding} effective d'un appel à la commande.
le convertisseur retourne une Liste de Func?
le convertisseur retourne une Liste de Func?
OriginalL'auteur Mare Infinitus | 2013-03-22
Vous devez vous connecter pour publier un commentaire.
Je voudrais utiliser un petit "modèle de vue" de détenir des informations pour une telle commande.
faire une collection à l'intérieur de votre modèle d'affichage qui devrait obtenir le contexte des actions comme le
et simplement lier cette collection à votre ContextMenu.
L'ItemTemplate pour le contextmenu objets peuvent désormais accéder le nom, la commande et tout ce dont vous pourriez avoir besoin. Il pourrait être utile de modifier le CommandParameter aswell de sorte qu'il va appeler la commande avec les actions de posséder élément, non pas avec l'action elle-même.
Quelqu'un a une idée de comment gérer un ContextMenu avec des séparateurs et des sous-menus? Cette solution semble être seulement utile pour une homogène un ensemble de objets.
Submenues sont tout aussi facile. Vous venez de donner le ContextMenu un ItemContainerStyle avec un setter pour ItemsSource et de se lier à une nouvelle propriété de type ObservableCollection<ContextAction> à l'intérieur d'un ContextAction. Pour les Séparateurs voir this la solution.
OriginalL'auteur dowhilefor
- je utiliser quelque chose comme ceci:
dans votre contextmenu datacontext:
dans votre xaml
ses écrits sans ide, donc peut-être quelques erreurs de syntaxe dans les il y
OriginalL'auteur blindmeis
Une amélioration de la version XAML de @blindmils solution ci-dessous:
OriginalL'auteur Ole K