basic mvvm implementation