Implemented true MVVM pattern, using Model, View, ViewModels appropriately