>それはイベントを受け取る側の話
+=Button_Click(obj,e)と混同してた

>イベントの意味を考えればCanExcetuteが呼び出されるのは誰にでも推測できる
そんなもんですか

var d = CanExecuteChanged;//ここで呼びだしているんですよね?
if (d != null)
d(this, null);
ブレークポイント作ってdの値を見ると
CanExecuteがtrueの時はOnCanExecute・・・って長いのが入ってて
そうでない場合はnull

で、この結果がOkCommandをバインドしているコントロールすべてに影響するように
ICommandインターフェース内で何か処理しているんですよね

むずかしーなー
もしかしてプログラミングって習得するまで何年もかかるの?