This article has been localized into Russian by the community.
Введение в Команды WPF
В предыдущей главе мы научились обрабатывать события (events), такие как нажатие пользователем на кнопку (Button) или на комманду меню. В современном пользовательском интерфейсе, принято что одна и та же функция может быть доступна из разных мест, то есть вызвана разными действиями пользователя.
К примеру, дано приложение с типичным интерфейсом в котором есть основное меню и несколько панелей инструментов (toolbars). Такие действия как New или Open могут быть доступны и из меню и из панели инструментов, и из контекстного меню (меню которое появляется при нажатии на правую кнопку мышки), и с помощью клавиатуры (Ctrl+N and Ctrl+O).
Каждое из этих действий должно выполнять один и тот же код, так в приложении WinForms вы бы создали несколько событий и вызывали общую функцию. В примере выше, должно быть минимум три обработчика событий и код обработки горячих клавиш. Это не самый лучший подход.
Команды
В WPF, Microsoft пытаются исправить это при помощи концепта команд. Это позволяет вам создавать функции в одном месте и затем обращаться к ним из любых элементов управления, таких как, элементы меню, кнопки на панелях и прочих. Еще WPF будет ожидать нажатия горячих клавиш и передавать их соответствующим командам если таковые есть. Согласитесь это проще чем обрабатывать горячие клавиши в отдельном месте вручную.
Команды упрощают еще кое что в ситуациях когда есть несколько обращений к одной функции. В приложении WinForms вы ответственны за написание кода отключающего элементы интерфейса если действие недоступно. Например использовать команду Вырезать, можно только если есть выделенный текст, и вам придётся вручную включать и выключать элементы интерфейса при каждом изменении выделения текста.
С помощью команд WPF всё это централизовано. Один метод проверяет, может ли быть выполнена данная команда, затем WPF автоматически включает и выключает все подписанные элементы интерфейса. Это сильно упрощает создание гибкого и динамического приложения!
Привязка команд
По сути сами по себе команды ничего не делают. Попросту они применяют интерфейс ICommand, который определяет событие и два метода: Execute() и CanExecute(). Первый выполняет непосредственно действие, а второй проверяет возможность выполнения. Для выполнения действия команды, нужна связь между командой и вашим кодом, и поможет нам в этом CommandBinding.
Обычно CommandBinding определён в Window или UserControl и содержит ссылки на обрабатываемую команду, обработчики событий Execute() и CanExecute() команды.
Существующие команды
Конечно можно писать свои команды, чем мы и займемся в следующих статях, но для простоты, разработчики WPF сделали сотню часто используемых команд которые вы можете использовать. Они разделены в 5 категорий ApplicationCommands, NavigationCommands, MediaCommands, EditingCommands и ComponentCommands. Особенно ApplicationCommands содержит такие команды как New, Open, Save и Cut, Copy и Paste.
Итог
Команды помогут Вам выполнять однотипные действия, инициированные несколькими источниками, использующими один и тот же обработчик событий. Они также упрощают включение и выключение элементов интерфейса, основываясь на доступности выполнения команды. Это теория, а как использовать и создавать свои собственные команды, мы обсудим в следующих статьях.