2010-02-12 21 views
5

Ok, si spera che sia semplice, ma per qualche motivo non riesco a trovare una risposta diretta e non sono abbastanza familiare con WPF per sapere come farlo.Menu contestuale WPF e ListView

Ho una lista, si lega a una collezione osservabile di oggetti da visualizzare. Voglio avere un menu contestuale con un sacco di opzioni. Le opzioni nel menu di scelta rapida sono relative al particolare oggetto nella lista su cui è stato fatto clic (cose come eliminazione, esportazione, ecc.).

Quindi ho bisogno che l'oggetto che l'utente ha fatto clic su destro nella mia listview sia passato come parametro al comando che il menu contestuale esegue.

Come posso fare?

Modifica: Vorrei menzionare preferirei una soluzione che è principalmente (se non interamente) xaml - Sto cercando di evitare di avere codice significativo nel code-behind. Se questo è l'unico modo per farlo però ...

Ulteriori modifica: Altri dettagli che ho dimenticato di menzionare sono importanti. Il comando che voglio eseguito è sull'oggetto associato al contesto dati del mio controllo utente, non sugli oggetti nella visualizzazione elenco. Quindi ho bisogno del menu di scelta rapida sugli elementi della vista elenco da associare a un comando presente nel contesto dati del controllo utente e l'elemento listview passato come parametro in quel comando.

risposta

4

Dipende se il vostro ContextMenu fa parte del modello per singoli articoli o se è collegato all'intero ListBox.

Se si collega il tuo ContextMenu agli elementi nell'elenco utilizzando un DataTemplate (che in genere è il modo migliore per farlo), il DataContext sulla MenuItem è già impostato in modo tutto quello che dovete fare è:

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

D'altra parte, se il ContextMenu è attaccato al ListBox nel suo insieme, è necessario accedere alla proprietà SelectedItem del ListBox:

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