2010-02-12 14 views
5

Ok, afortunadamente esto es simple pero por alguna razón no puedo encontrar una respuesta directa y aún no estoy lo suficientemente familiarizado con WPF como para saber cómo hacerlo.WPF contextmenu y ListView

Tengo una vista de lista, se une a una colección observable de objetos para mostrar. Quiero tener un menú contextual con muchas opciones. Las opciones en el menú contextual son relativas al objeto particular en la lista en la que se hizo clic (cosas como eliminar, exportar, etc.).

Necesito el objeto que el usuario hizo clic derecho en mi vista de lista para pasarlo como un parámetro al comando que se ejecuta en el menú contextual.

¿Cómo puedo hacer esto?

Editar: Debo mencionar que preferiría una solución que es principalmente (si no del todo) xaml - Estoy tratando de evitar tener un código significativo en el código subyacente. Si esa es la única forma de hacerlo ...

Editar más: Más detalles que olvidé mencionar que son importantes. El comando que quiero ejecutar está en el objeto vinculado al contexto de datos de mi control de usuario, no está en los objetos en la vista de lista. Por lo tanto, necesito que el menú contextual en los elementos de la vista de lista se vincule a un comando que está en el contexto de datos del control de usuario, y el elemento listview pasado como parámetro en ese comando.

Respuesta

4

Depende de si su ContextMenu es parte de la plantilla para elementos individuales, o si está adjunta al ListBox como un todo.

Si va a conectar su ContextMenu a los elementos de la lista utilizando un DataTemplate (esto es generalmente la mejor manera de hacerlo), el DataContext en el MenuItem ya está establecido así que todo lo que necesita hacer es:

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

Por otro lado, si su ContextMenu se une a la ListBox en su conjunto, que necesita para acceder a la propiedad de la SelectedItemListBox:

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