I am not sure there is one good answer. It sounds like you are discussing how to maintain consistency - do you have a simple end-to-end diagram at the presentation level, or do you insert user requests and have logic there.
If this is, in fact, a question, there are different factors. Do you prefer to do presentation-level verification? How complex is the application and how scalable is it? Are your view models available in different places?
So, with all this in mind, I can tell you how personally I prefer to approach this problem (in particular, the question of adding a mention to you). I usually like to create view models that describe user problems using generics like EditItemViewModel<T> or ListViewModel<T> . So, in the graphical interface there will be some list of numbers associated with the ListViewModel<Room> . This virtual machine obviously exposes an observable collection, as well as commands for adding, deleting, editing.
So, from my point of view, the level of presentation, the model material that this virtual machine is going to do, is route requests for other GUI tasks. If you click "Add" to add a room, this virtual machine is responsible for initiating a request using the command for any screen / window / everything that is needed to add a room that will have its own virtual machine. After receiving the request for addition, this virtual machine transfers the generated data transfer object to the domain where validation will be performed, and any domain operations are necessary. I usually process this through the service level. Now, if the domain operation was successful, the service level will raise an even or callback to inform the VM that there is a change. When this happens, the VM list re-requests its service and accordingly updates its observed collection. Now your GUI is compatible with the domain in all directions.
The reason I approve of this type of layered approach is that all business logic arises in the "below" the GUI, and the GUI should not touch on this event. Conceptually, the GUI simply says: "Here, at the domain level, the user wants to add this - do it all, and let any interested GUI components know when you are done so that they can be updated."
What I am describing here will naturally require some overhead compared to a simple, end-to-end scheme or a scheme in which virtual machines simply re-map properties on some model object. But, personally, I think that the advantage obtained by decoupling is worth it, especially when expanding the application. This gives you the opportunity to fundamentally change the internal interactions of the domain model, without changing the code of the presentation level, lick.