Neat Approach, but I think more clever solution would be to create a custom property delegate (i.e `ReadWriteProperty`) and delegate the fields to it, benefits of this approach would be:
1- reusable we can use it with more than just a viewmodel
2- significantly less boilerplate compared to many interfaces approach
3- well encapsulated, it will not allow the consumer to modify the property
4- last but not least, it will be more elegant, cleaner and readable to anyone reads the code.
What do you think about it?