Monday, November 22, 2010

WPF & Silverlight: Интерфейс ICommand и его назначение

"Для чего нужен интерфейс icommand wpf" – подобные запросы зачастили в последнее время, решил написать небольшую статью на эту тему.
Интерфейс ICommand представляет основу для команд в паттерне MVVM. Он реализует известный паттерн – Команда. Более подробно об паттерне MVVM есть здесь: http://msdn.microsoft.com/ru-ru/magazine/dd419663.aspx, да и я писал несколько раз на эту тему, воспользуйтесь поиском.

   Вкратце объясню суть MVVM: Model – модель представляющая данные в нашем приложении, View – отображение этих данных, ViewModel (дальше VM) – модель, которая связывает наши данные и отображение посредством биндинга (привязки), содержит в себе всю логику работы нашего контрола (окна). VM не содержит прямой ссылки на отображение, все работает через биндинг – она "кладется" в DataContext нашего отображения. Это все возможно благодаря великолепной реализации биндинга в WPF. Команды в этом случае выполняют роль методов, которые мы раньше вызывали после нажатия на кнопку, смену выбранного элемента списка. К примеру, у кнопки есть свойство Command, в котором мы можем указать команду, описанную в нашей VM, которая вызовется после нажатия этой кнопки.
   ICommand имеет 2 метода: Execute и CanExecute. Execute – основная логика команды – все, что должно произойти при вызове команды. CanExecute – может ли быть вызван метод Execute в текущем состоянии команды. Есть уже много реализаций этого интерфейса – базовые классы, которые инкапсулируют общую логику команд. Например, SimpleCommand или RoutedCommand. В общем-то каждый MVVM фреймворк содержит в себе свою реализацию этого интерфейса, хотя суть везде одинакова.

Read more: .NET разработка от devlanfear