created a ViewModel base class
created bindable properties (INotifyPropertyChanged) and relay commands (ICommand)
created an ObservableList class (INotifyCollectionChanged)
created a special meta-class for ViewModel that takes care of linking related bindable properties and commands
added a small example

shows data bindings, commands, command parameters and properties
that depend on each other