Well, I have to agree your approach makes the most sense, I think!
I'm just a bit 'annoyed' by the fact that business and UI concerns are intermingled like this. If I consider the moving of an item on a canvas, there are these concerns:
- If I move a single item, the selection service needs to be notified to deselect other items
- Once it is moved, I want to notify the undo service that there has been a movement
- When doing a "rectangular marquee" type selection (i.e. drag a box and everything inside is considered selected), then the selection service actually needs to know the physical size of the items so it can determine which items fall within the
I am sure that I can find a way to handle this by just exposing a "New Coordinates For Item" event from the view to the VM and handling the rest of the logic in the view, kind of :)