 <p>I think, in this situation it is better to abstract of the commands, therefore I advise the third paragraph:</p> <blockquote> <p>I could call <code>Save()</code> inside the <code>Open()</code> function of my VM too.</p> </blockquote> <hr> <blockquote> <p><code>Open()</code> function should really only open a document and not do other validation/checks.</p> </blockquote> <p>I agree, but for example, before opening the door you should first make sure that it is closed. Does become to do a separate function? I think it will be easier and more correct:</p> <pre><code>private void Open() { if (IsSomeChanges == true) { Save(); } ... } </code></pre> <p><code>Command</code> is a <a href="http://en.wikipedia.org/wiki/Command_pattern" rel="nofollow"><code>pattern</code></a> that allows you to call on the side <code>View</code> your method with minimal dependence and from different controls. If for example, you had to call the Command on the side of View, for example in the <em>attached</em> behavior, then you would need to use <code>SomeCommand.Execute()</code>. But inside in the <code>ViewModel</code> you can simply directly call this methods.</p>