title: Commands and MVVM principles - RelayCommands
body: <p>I'm new at C#, WPF and MVVM pattern. Sorry for this quite long post, I am trying to set all my points of understanding (or non understanding).</p>
  
  <p>After studying a lot of texts on the commanding mechanism provided by WPF and the MVVM pattern, I have a few problems getting my mind straight on how to use these things.</p>
  
  <p>I understand that the commands provided for WPF allows to define multiple "calling points" for  command logic that is held in a component of the visual tree. When a command is called, the call bubbles through the visual tree (starting at the command target or the focused element) until it bumps into an element holding a CommandBinding that defines where is the command logic.</p>
  
  <p>What seems nice about that is that you can define public commands without specifying either the logic nor the calling points at first.</p>
  
  <p>I also understand that following the MVVM pattern, the ViewModel of a View should handle the logic whereas the base WPF implemtentation of commands only allows visual elements to handle it because the call bubbles through the visual tree.</p>
  
  <p>I then found that custom implementations such as Josh Smith's RelayCommand can be used in this case, as you bind a command called by an element of the view (button for example) to the RelayCommand object in the underlying ViewModel.</p>
  
  <p>But then, I dont see how it's a command (by the definition of WPF commanding pattern)  anymore since we're directly specifying an implementation that is referenced in the ViewModel. With this method, we loose all the benefits of being able to call a command from anywhere without knowing where the logic is implemented. In this case, why not directly use a Click event handler (for example) ?</p>
  
  <p>Could someone explain me where I'm wrong ?
  (thanks for those who read the post to the end !)</p>
  
  <p>Regards.
  NR</p>