Commands exist for 1 reason = execute some logic. Sometimes it is allowed to add logic regarding Undo functionality or logic, which determine, is is possible to use this command right now or not. There are already defined this interface in .NET here
///<summary>
/// An interface that allows an application author to define a method to be invoked.
///</summary>
public interface ICommand
{
/// <summary>
/// Raised when the ability of the command to execute has changed.
/// </summary>
event EventHandler CanExecuteChanged;
/// <summary>
/// Returns whether the command can be executed.
/// </summary>
/// <param name="parameter">A parameter that may be used in executing the command. This parameter may be ignored by some implementations.</param>
/// <returns>true if the command can be executed with the given parameter and current state. false otherwise.</returns>
bool CanExecute(object parameter);
/// <summary>
/// Defines the method that should be executed when the command is executed.
/// </summary>
/// <param name="parameter">A parameter that may be used in executing the command. This parameter may be ignored by some implementations.</param>
void Execute(object parameter);
}
Adding additional logic for your objects here is not good. It breaks SRP principle and makes code more complicated.