2010-02-12 7 views
5

Ok, j'espère que c'est simple mais pour une raison quelconque, je ne peux pas trouver une réponse directe et je ne suis pas encore assez familier avec WPF pour savoir comment le faire.WPF contextmenu et ListView

J'ai un listview, il est lié à une collection observable d'objets à afficher. Je veux avoir un menu contextuel avec un tas d'options. Les options du menu contextuel sont relatives à l'objet particulier de la liste sur laquelle vous avez cliqué (par exemple, supprimer, exporter, etc.).

J'ai donc besoin que l'objet sur lequel l'utilisateur a cliqué à droite dans ma listview soit passé en paramètre à la commande que le menu contextuel exécute.

Comment faire?

Éditer: Je devrais mentionner que je préférerais une solution qui est la plupart du temps (sinon entièrement) xaml - j'essaye d'éviter d'avoir le code significatif dans le code-derrière. Si c'est la seule façon de le faire si ...

Modifier plus: Plus de détails que j'ai oublié de mentionner qui sont importants. La commande que je veux exécuter est sur l'objet lié au contexte de données de mon contrôle utilisateur, ce n'est pas sur les objets dans la vue de liste. J'ai donc besoin que le menu contextuel des éléments de la vue liste soit lié à une commande qui se trouve dans le contexte de données du contrôle utilisateur, et que l'élément listview soit passé en paramètre dans cette commande.

Répondre

4

Cela dépend si votre ContextMenu fait partie du modèle pour des éléments individuels ou si elle est attachée à la ListBox dans son ensemble.

Si vous connectez votre ContextMenu aux éléments de la liste à l'aide d'un DataTemplate (ce qui est généralement la meilleure façon de le faire), le DataContext sur le MenuItem est déjà réglé tout ce que vous devez faire est:

<MenuItem ... CommandParameter="{Binding}" /> 

d'autre part, si votre ContextMenu est attaché à la ListBox dans son ensemble, vous aurez besoin d'accéder à la propriété SelectedItem du ListBox:

<MenuItem ... CommandParameter="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor,ListBox,1}} />