Events implement a tight coupling between the publisher and subscribers, the format is rigid and difficult to scale. Most damningly, the publisher doesn't know who its subscribers are and thus will continue to publish even when all the subscribers have gone. This leads to memory leaks.
Moreover, if a ViewModel has handlers in it that listen for events originating on the user surface, those events must be artificially created somehow to run controlled tests on the ViewModel. And per your question, this can be hard to do.
Commands, on the other hand, are only executed when the ViewModel is in a predictable state and returns true to the CanExecute query. When the CanExecute query returns true, the command can be executed and its mutations can be observed precisely and comprehensively.
In practice, a ViewModel with lots of handlers in it gets tested when the developer fires up the app and looks for a given condition; a ViewModel that uses the command pattern can be tested at 2AM in the morning when everyone is home asleep.
Your example... User story: When I double click an item in the list box and then click 'ok' within 5 seconds, a query against the database should be generated. But only if it's Tuesday and only if it's raining in Bangkok.
Event Model: difficult to program, impossible to test comprehensively (unless it's Tuesday :) ), impossible to scale, after repeated bugs, user has low confidence in your work.
Command Model: simple to program, simple to test, 100% test coverage provable after each change to the requirements.