 <p>I used RelayCommands and this has a constructor where you can create a canExecute Predicate and then if it returns false the bound button will be disabled automatically.</p> <p>On the delegate command you should rewrite the CantDoAnything() method to represent your enable and disable logic. And the binding you should simply bind to the Command.</p> <p><a href="http://msdn.microsoft.com/en-us/library/ff654427" rel="nofollow">DelegateCommand constructor on MSDN</a> </p> <p><a href="http://stackoverflow.com/questions/7350845/canexecute-logic-for-delegatecommand">DelegateCommand CanExecute BugFix</a></p>