2010-02-12 4 views
5

Ok, hoffentlich ist das einfach, aber aus irgendeinem Grund kann ich keine klare Antwort finden und ich kenne WPF noch nicht genug, um zu wissen, wie es geht.WPF Contextmenu und ListView

Ich habe eine Listenansicht, es wird an eine beobachtbare Sammlung von Objekten gebunden angezeigt werden. Ich möchte ein Kontextmenü mit einer Reihe von Optionen haben. Die Optionen im Kontextmenü sind relativ zu dem bestimmten Objekt in der Liste, auf das geklickt wurde (Dinge wie Löschen, Exportieren usw.).

Also brauche ich das Objekt, das das Benutzerrecht in meinem Listenansicht angeklickt hat, um als Parameter an den Befehl übergeben zu werden, den das Kontextmenü ausführt.

Wie mache ich das?

Edit: Ich sollte erwähnen, ich würde eine Lösung bevorzugen, die meist (wenn nicht vollständig) Xaml - Ich versuche zu vermeiden, dass signifikante Code im Code-Behind. Wenn das die einzige Möglichkeit ist, es zu tun ...

Weiter Edit: Weitere Details, die ich vergaß zu erwähnen, dass wichtig sind. Der Befehl, der ausgeführt werden soll, befindet sich auf dem Objekt, das an den Datenkontext meines Benutzersteuerelements gebunden ist, und nicht auf den Objekten in der Listenansicht. Daher muss das Kontextmenü in den Elementen der Listenansicht an einen Befehl gebunden sein, der sich im Datenkontext des Benutzersteuerelements befindet, und das Element listview wird als Parameter an diesen Befehl übergeben.

Antwort

4

Es hängt davon ab, ob Ihre ContextMenu Teil der Vorlage für einzelne Elemente ist, oder ob sie an die ListBox als Ganzes angehängt ist.

Wenn Sie Ihre ContextMenu auf die Elemente in der Liste sind das Anbringen eines Datatemplate verwenden (dies ist in der Regel der beste Weg, es zu tun), die DataContext auf der MenuItem bereits gesetzt ist, so alles, was Sie tun müssen, ist:

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

auf der anderen Seite, wenn Ihr ContextMenu zum ListBox als Ganzes angebracht ist, werden Sie die SelectedItem Eigenschaft des ListBox zugreifen müssen:

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