Adds a property-change callback mechanism to the base view model to
support MVVM.
The view model cannot be used by itself, so it has been made abstract.