MVVM framework