なかなかRESがつかないですね。
私の持論でお話ししますね。
MVVMと言っても、現実には、そこまで厳格なものではないと思います。
確実なのは、
<ComboBox ItemsSource="{Binding NameList}" ...
などとしたときに、NameListというプロパティがViewModelに存在する。
それぐらいじゃないでしょうか?
その結果として、GUIの設計とは無関係に内部処理の設計ができる。
NameListの実体が文字列リストだとして、
それを ComboBox に表示するか、ListBoxに表示するか、DataGridに表示するか、
なんてのはGUIの都合であって、内部処理とは無関係な話です。
それを分離したいというのがMVVMの基本理念だと思うからです。
なので、私的にはICommandは必須じゃないと思います。
メッセージはこれまで通り、Viewにハンドラを用意してもよくて、そこから
DataContext参照して、ViewModelのメンバを呼んでBindingデータを更新できれば
いいわけです。
(より、ViewとViewModelの完全分離を目指すならICommandかな、ぐらい)
重要なのは、
「ComboBoxの表示内容とNameListの内容が完全に動的リンクすること」
これだけです。
そうすれば、ViewとViewModelの分離は可能だと思うからです。
ViewModelとModelになると、もっと曖昧な気がします。
単純なアプリなら、ViewModel == Model でいいし(ViewModelのプロパティを
そのまま保存しちゃえばいい)、
電卓のようなアプリなら、何も保存するものがないので、Modelがなくても
良いのではないでしょうか。