Kailash's Blogs

ICommand In MVVM

Kailash Chandra Behera | Tuesday, October 18, 2016
Kailash's Blogs


The propose of this article is to discussed use of ICommand Interface, which is part of .Net Framework in Model View ViewModel pattern(MVVM).

Getting Started

ICommand interface is part of .NET Framework, this interface is used a lot in MVVM applications. Mostly it is used to declare Command in MVVM.
The ICommand interface is the code contract for commands that are written in .NET for Windows Runtime apps. These commands provide the commanding behavior for UI elements such as a Windows Runtime XAML Button and in particular an AppBarButton.

ICommand interface specifies three members:

  1. Execute():- The Execute method takes one parameter having datatype object and is called when the command is actuated. It has one parameter, which can be used to pass additional information from the caller to the command.
  2. CanExecute():- This method takes same parameter as Execute and return boolean,If the return value is true, it means that the command can be executed. The parameter is the same one as for the Execute method. When used in XAML controls that support the Command property, the control will be automatically disabled if CanExecute returns false.
  3. CanExecuteChanged :- It is an event handler and it must be raised by the command implementation when the CanExecute method needs to be reevaluated. In XAML, when an instance of ICommand is bound to a control’s Command property through a data-binding, raising the CanExecuteChanged event will automatically call the CanExecute method, and the control will be enabled or disabled accordingly.

The class that implements ICommand and have to implement the Execute and CanExecute method. But the CanExecuteChanged event does not need to be raised manually. A class named CommandManager is observing the user interface and calls the CanExecute method when it deems it necessary in Windows Presentation Framework(WPF).


 public class RelayCommand: ICommand   
   public boolCanExecute(object parameter)   
     // code to checking condition  
   public event EventHandlerCanExecuteChanged;   
   public void Execute(object parameter)  
     //Code for execution logic  


XAML for Windows Runtime does not support x:Static, so don't attempt to use the x:Static markup extension if the command is used from Windows Runtime XAML. Also, the Windows Runtime does not have any predefined command libraries, so the XAML syntax shown here doesn't really apply for the case where you're implementing the interface and defining the command for Windows Runtime usage.

Related Articles

  1. WPF Dispatcher
  2. Command In MVVM
  3. WPF Data Validation: IDataErrorInfo
  4. Data Validation in WPF
  5. Resource in WPF


In this article we have discussed about ICommand interface and use of this interface in MVVM. Hope this article may become useful to you.