in my WPF UI, I use RoutedCommands that I refer to in my xaml via the following code:
Command=\"viewModel:MessageListViewModel.DeleteMessagesCommand\"
I very much prefer the DelegateCommand implementation of Prism for viewmodel binding (http://msdn.microsoft.com/en-us/library/ff654132.aspx). You can invoke CanExecute() on every command invoker by calling RaiseCanExecuteChanged on it.
Simple usage example:
public class ViewModel
{
public ViewModel()
{
Command = new DelegateCommand