Your MVVM is just one layer of abstraction between model and view. It is good layer because it separates model/view and provides strict translation from model to view.
But… MVVM introduced by Microsoft have much more responsibilities than translating data in model to strings which can be displayed on screen.
Main assumption of MVVM is separate developer and designers to be able working independently.
Moreover View should respond to changes in ViewModel. So when data changes View should automatically refresh it state. This should be implemented by some kind of binding between ViewModel and View. In our case this could be done by one of reactive frameworks.
Code your provide is far away from books implementation.