Data Driven Applications with MVVM Part I: The Basics