TOC

This article has been localized into Russian by the community.

Команды (Commands):

Введение в Команды 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.

Итог

Команды помогут Вам выполнять однотипные действия, инициированные несколькими источниками, использующими один и тот же обработчик событий. Они также упрощают включение и выключение элементов интерфейса, основываясь на доступности выполнения команды. Это теория, а как использовать и создавать свои собственные команды, мы обсудим в следующих статьях.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!