Я использую пользовательскую RoutedCommand в контекстном меню. Команда определяется следующим образом:
public static readonly RoutedCommand RoutedAddMainHeading = new RoutedCommand();
И к нему обращаются так:
<ContextMenu>
<MenuItem Header="Add Main Heading" Command="local:JurisdictionVM.RoutedAddMainHeading" />
</ContextMenu>
Работает нормально, кроме случаев запуска моей программы, команда отключена. После нажатия на текстовое поле в окне оно становится активным.
Если я использую собственную реализацию ICommand (CanExecute всегда возвращает true), этого не произойдет, но команда не будет перенаправлена.
Я пытался вызвать CommandManager.InvalidateRequerySuggested, но, похоже, это ничего не делает.
Я использую приемник команд, чтобы определить привязку команды и связать ее с моей моделью представления, что может быть причиной проблемы. Я использую реализацию, которую я нашел здесь: http://www.codeproject.com/KB/WPF/VMCommanding.aspx
ОБНОВЛЕНИЕ: Не похоже, что проблема связана с привязкой пользовательских команд. Я попробовал стандартную привязку CommandBinding, связанную с методами кода и у меня та же проблема. CommandBinding определяется как:
<CommandBinding Command="local:JurisdictionVM.RoutedAddMainHeading" CanExecute="Foo_CanExecute" Executed="Foo_Executed"/>
Кажется, это проблема, уникальная для ManuItem. У меня нет этой проблемы, если я использую эту команду в кнопке.
Есть ли другой способ принудительно пересмотреть CanExecute?
Или способ установить RoutedCommand по умолчанию включенным (или способ написать пользовательский)?