CommandParameters в ContextMenu в WPF

У меня есть сценарий, когда у меня есть элемент управления TreeView WPF, который имеет HierarchicalDataTemplate для своих элементов. Теперь внутри HierarchicalDataTemplate меня есть надпись Label а Label имеет ContextMenu с элементом меню для Delete . Элемент меню «Удалить» привязан к команде « DeleteCommand которая является частью classа, который был установлен как DataType данных в HierarchicalDataTemplate DataType .

Теперь я хочу передать элемент управления TreeView в CommandParameters элемента CommandParameters Delete ContextMenu, чтобы я мог обрабатывать выбор TreeViewItems при удалении выбранного элемента.

Но если я связываю CommandParameters как {Binding ElementName=TreeViewName} или что-то в этом {Binding ElementName=TreeViewName} , оно всегда равно null, если связанный элемент не является свойством в DataContext .

Может ли кто-нибудь помочь мне с решением, потому что я думаю, что я пробовал все возможные вещи, такие как RelativeSource и AncestorType и т. Д., Но всегда он равен нулю. Для меня это выглядит как ограничение или ошибка в структуре.

Проблема в том, что ContextMenu находится в корне собственного визуального дерева, поэтому любые привязки RelativeSource.FindAncestor не будут проходить через ContextMenu.

Одним из решений является использование свойства PlacementTarget для настройки двухэтапного привязки с вашего ярлыка:

  

Однако это довольно взломанно. Вам лучше настроить свойство CommandTarget вашего MenuItem на PlacementTarget ContextMenu и иметь обработчик команд в TreeView. Это означает, что вам не придется пропускать TreeView.

    
   

ContextMenu.PlacementTarget, это ярлык, где размещается элемент меню. Из Lavel его родительское Treeview доступно.

Взгляните на WPF CommandParameter Binding Problem . Возможно, это может дать некоторые указания относительно того, что происходит.

  • Как определить номер недели определенной даты?
  • Стиль windows WPF не применяется
  • Правильная проверка с помощью MVVM
  • Как обновить ObservableCollection с помощью рабочего streamа?
  • Обнаружение ошибок проверки WPF
  • Как получить текущие координаты экрана мыши в WPF?
  • Получение каталога приложения из приложения WPF
  • WPF - Как создать меню и подменю, используя привязку
  • Исключение (исключения) задачи не наблюдалось ни при ожидании задачи, ни при доступе к ее свойству Exception. В результате необнаруженное исключение было
  • Force TextBlock для переноса в WPF ListBox
  • Как использовать FolderBrowserDialog из приложения WPF
  • Давайте будем гением компьютера.