First of all, ICommand is not the mechanism to support events. It is the mechanism by which you should perform command based functionality in WPF or Silverlight. The reason I say this is because it goes beyond what an event should do - with commanding infrastructure, you can also affect the UI by determining whether or not something can happen because the ICommand interface also supports a CanExecute method. When something supports ICommand, the UI will actually take this method into account, so that you can't press a button when CanExecute returns false.
As you are now aware, you can't bind an ICommand to a selection changed because it doesn't support command binding. At first, this would seem to be a real problem, but there are a number of solutions that support this. Probably the best implementation is the EventToCommand support in MVVM Light which you can find
here[
^].
Laurent demonstrates using this behavior
here[
^].