WPF Commands vs Events Преимущества / Недостатки

Может кто-нибудь сказать мне, каковы преимущества использования команд по сравнению с событиями в WPF. Команды или события сталкиваются с утечками памяти? Какой самый быстрый подход. Каковы их недостатки.

5 ответов

Команды предоставляют два основных преимущества по сравнению с обработчиками событий:

  1. Команды не связаны с вызывающим абонентом, поэтому та же команда не зависит и может быть вызвана из пункта меню, кнопки панели инструментов, клавиатуры и т. д.
  2. Команды предоставляют поддержку для включения / отключения всех связанных элементов управления пользовательского интерфейса в зависимости от состояния команды (может быть выполнена или нет)

Я бы предпочел использовать команды в реальном проекте, особенно если вы хотите использовать MV-VM.

Я не слышал о каких-либо утечках памяти, связанных с командами.

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

Для более подробной информации о командах см. Commanding Overview( архив) ( v4)

Но хотя команды и события могут накладываться друг на друга, это две разные вещи. Команды говорят "сделай это!", А события говорят "это только что произошло!". Таким образом, у вас может быть CloseWindowCommand для закрытия окна, но у окна может быть ClosingEvent, который сообщает подписывающимся объектам, что это закрытие.

Команды - это более стандартный способ интеграции событий. они могут быть более полезными, чем события, потому что с их помощью вы можете определить одну задачу (команду) и использовать ее из разных мест. Например, вы можете определить команду сохранения и использовать пункт меню, пункт контекстного меню и кнопку для одновременного использования. Таким образом, вы можете централизовать задачи. также команды поддерживают привязку данных, что является очень мощной функцией приложения WPF. Насколько я знаю, команды приводят к определенным типам утечек памяти, но вы можете избежать этого, используя множество обходных путей. Я должен добавить, что шаблон проектирования MVVM также использует команды в качестве стандартного способа разработки приложения WPF. работать с событиями намного проще, но команды обеспечивают очень мощный дизайн. но вы должны теперь, что вы не можете всегда использовать команды вместо событий. Есть много мест, которые вы можете использовать только события.

Кроме того, WPF4.0 позволяет связывать определения команд. Это еще больше упрощает предоставление команд из моделей представлений, что помогает вам отделить логику от проблем пользовательского интерфейса.

Команды являются перенаправленными событиями.

Другие вопросы по тегам