Commands and events come from your business rules.
If you have poor CRUD-like API when client simply sends current state of the object, you can make some kind of bridge between this poor API and your commands.
Don't let your model/commands suffer from UI, i.e. don't make fat and generic commands like UpdateFoo.
Bear in mind, that such API may suffer from race conditions: if user A opens fat form, user B opens same form, user B changes something, user A changes something and saves the form, then you probably will make incorrect assumptions of user A intentions (it would look like user A wants to revert user's B changes).
It can be fixed with something like optimistic locking, but it's an UI issue in the first place.
Good UI should provide user intentions in explicit way: user wants to ChangeAddress, user wants to FixTypoInAddress, ~ to DeleteAccount, etc.
Client knows what user wants better than server.