CommandParameters en ContextMenu en WPF

Tengo un escenario donde tengo un control WPF TreeView que tiene una HierarchicalDataTemplate para sus elementos. Ahora dentro de la HierarchicalDataTemplate , tengo una Label y la Label tiene un ContextMenu con un elemento de menú para Delete . Delete menuitem está vinculado a un comando llamado DeleteCommand que es parte de la clase que se ha establecido como el DataType de HierarchicalDataTemplate .

Ahora, quiero pasar el control TreeView en el CommandParameters del CommandParameters Delete elemento de DeleteCommand Delete del DeleteCommand para que pueda manejar la selección de TreeViewItems en la eliminación del elemento seleccionado actualmente.

Pero si vinculo los CommandParameters como {Binding ElementName=TreeViewName} o lo que sea, siempre será nulo a menos que el elemento binded sea una propiedad en DataContext .

¿Alguien puede ayudarme con una solución porque creo que he intentado todas las cosas posibles, como RelativeSource y AncestorType, etc. pero siempre es nula. Para mí, parece una limitación o un error en el marco.

El problema es que el ContextMenu está en la raíz de su propio árbol visual, por lo que cualquier vinculación RelativeSource.FindAncestor no irá más allá del ContextMenu.

Una solución es usar la propiedad PlacementTarget para configurar un enlace de dos etapas desde su etiqueta:

  

Esto es bastante hacky, sin embargo. Es mejor que establezca la propiedad CommandTarget de su MenuItem en PlacementTarget de ContextMenu y que tenga el controlador de comando en su TreeView. Esto significa que no tendrá que pasar el TreeView.

    
   

ContextMenu.PlacementTarget, es Etiqueta, donde se aloja el elemento de menú. Desde Lavel, su padre Treeview es accesible.

Eche un vistazo a WPF CommandParameter Binding Problem . Tal vez puede proporcionar algunos consejos sobre lo que está pasando.