События CommandManager не запускаются для пользовательских ICommands - PullRequest
0 голосов
/ 15 июня 2010

WPF CommandManager позволяет выполнять следующие действия (псевдо-ish-код):

<Button Name="SomeButton" Command="{Binding Path=ViewModelCommand}"/>

А в коде позади:

private void InitCommandEvents()
{
    CommandManager.AddExecutedEventHandler(this.SomeButton, SomeEventHandler);
}

SomeEventHandler никогда не вызывается.

Мне это не показалось чем-то очень неправильным, но если вы подумаете о том, что происходит внутри CommandManager.AddExecutedEventHandler, то будет понятно, почему это не так. Добавьте к этому тот факт, что в документации четко указано, что CommandManager работает только с RoutedCommands.

Тем не менее, это на какое-то время очень расстроило меня и привело к следующему вопросу:

Что, по вашему мнению, является лучшим решением для того факта, что CommandManager не поддерживает пользовательские ICommands? Особенно, если вы хотите добавить поведение вокруг выполнения команды?

Сейчас я запускаю команду вручную в коде после события нажатия кнопки.

1 Ответ

2 голосов
/ 16 июня 2010

Обычно я просто подкласс RoutedCommand и повторно использую его функциональность вместо реализации ICommand с нуля. Тогда он хорошо работает с CommandManager и т. Д., И все счастливы.

С другой стороны, если вы реализуете ICommand с нуля, мне кажется, что CommandManager не нужен. AddExecutedEventHandler: ваша пользовательская ICommand может легко предоставить свой собственный способ регистрации для уведомлений при выполнении команды. Фактически, большинство пользовательских реализаций ICommand делают это в качестве основного способа обработки выполнения команд.

В любом случае кажется, что вам никогда не понадобится одновременно пользовательская функциональность ICommand и поддержка CommandManager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...