improved CanExecute to only raise events when actually changed and use explicit interface implementation for internal interface