привязка команд не работает?

#wpf #command

Вопрос:

Я работаю над приложением с несколькими вкладками (например, Текстовый редактор с несколькими вкладками), в котором каждый элемент tabitem имеет свой собственный контент. И в контекстном меню элемента табуляции у них есть элемент меню с командой, скажем, команда selectAll.

После запуска приложения пункт меню всегда отключен, выполнение команд не выполняется.

Итак, как я могу заставить работать мои привязки команд ?

код ::

В Контекстном Меню В Редакторе Текста>

 <MenuItem Command="local:TextEditor.SelectAllCommand" Header="Select All" />
 

В Привязках Команд В Редакторе Текста>

 <UserControl.CommandBindings>
  <CommandBinding Command="local:TextEditor.SelectAllCommand" 
                  Executed="SelectAll_Executed" CanExecute="SelectAll_CanExecute" />
</UserControl.CommandBindings>
 

Элементы табитации с редактором текста создаются во время выполнения

Комментарии:

1. Первым замечательным шагом может быть совместное использование кода с нами

2. @Snowbear JIM-компилятор Было бы ужасно, если бы здесь был пост-код.

Ответ №1:

Это происходит, так как контекстные окна являются отдельными окнами со своим собственным деревом визуализации и деревом логики.

Используйте вот так

 <MenuItem Header="Cut" Command="Cut" CommandTarget="
          {Binding Path=PlacementTarget, 
          RelativeSource={RelativeSource FindAncestor, 
          AncestorType={x:Type ContextMenu}}}"/>
 

Для получения дополнительной информации перейдите по ссылке ниже

http://www.wpftutorial.net/RoutedCommandsInContextMenu.html

Комментарии:

1. Спасибо за эту ссылку и вашу помощь

2. Это отлично работает. Но редактор XAML отображает ложную «Ссылку на объект, не заданную для экземпляра объекта». Он отлично работает после компиляции и запуска, но было бы неплохо, чтобы ошибка не отображалась в редакторе. Есть какой-нибудь способ это исправить?

Ответ №2:

смотрите ответ biju, ваш DataContext для вашего контекстного меню не тот, который вы ожидаете.

и если у вас возникнут какие-либо проблемы с привязкой в будущем, взгляните на Snoop. это простой в использовании инструмент для проверки ваших привязок во время выполнения.

я всегда проверяю 2 вещи:

  • является ли мой DataContext тем, который я ожидаю?!
  • является ли мой Путь Привязки тем, который я хочу?!