MVVM Framework для Windows Phone своими руками. Часть 1

52715c9a4f073d761c8af714ec76db3a.png Разработка приложений для платформ WPF, Silverlight, Windows Store и Windows Phone, почти всегда подразумевает использование паттерна MVVM. Это закономерно, так как базовой философией этих платформ, является разделение представления (так же я буду использовать термин интерфейс пользователя) и остальной логики программы. Этот подход позволяет получить следующие преимущества: Разделение пользовательского интерфейса и логики представления: что позволяет дизайнерам работать над пользовательским интерфейсом, а программистам над бизнес логикой приложения используя для взаимодействия абстрактный интерфейс модели представления Расширенные возможности автоматизированного тестирования: отделение пользовательского интерфейса от остальной логики, позволяет полностью протестировать логику представления без ограничений накладываемых автоматизацией тестирования через пользовательский интерфейс Множественные представления для одной модели представления: одна модель представления может использоваться многими реализациями интерфейса пользователя. Например, сокращенный и полный вариант представления данных, интерфейс зависящий от прав пользователя. Возможность использовать одну реализацию модели представления на различных платформах Расширенные возможности повторного использования компонентов: так как модели представления отделены от реализации представления, возможны любые варианты их использования, наследование от базовых моделей, композиция нескольких моделей и т.п. Разрабатывая приложения под платформу Windows Phone, я столкнулся с тем, большинство статей описывают базовую реализацию паттерна MWWM, которая обычно сводится к реализации в классе модели представления интерфейса INotifyPropertyChanged, создания простой реализации ICommand и простые сценарии связывания этих данных с представлением. К сожалению, остаются за рамками обсуждения такие важные вопросы как, реализация обобщенных классов с удобным интерфейсом, синхронизация потоков при асинхронном исполнении, навигация на уровне модели представления и многие другие.

Отдавая должное таким фреймворкам как MVVM Light и Prism, я предпочитаю в своих проектах использовать собственную реализацию данного паттерна, так как даже самые простые фреймворки излишне громоздки в силу своей универсальности.

Данная статья рассчитана на начинающих разработчиков, знакомых с основами разработки приложений для платформы Windows Phone, которые хотят более детально вникнуть в реализацию паттерна MVVM для платформы Windows Phone и научиться находить и применять более гибкие и простые решения для реализации приложений, построенных с его использованием. Возможно опытные разработчики найдут для себя статью интересной и предложат другие удобные решения описанных задач.

В качестве примера, создадим простое приложение «Кредитный калькулятор», вся функциональность которого будет реализована в Code-behind стиле.

Приложение содержит всего две страницы: главная страница приложения предназначена для ввод параметров кредита и страница подробной информации о рассчитанном кредите предназначена для отображения подробной информации о расчете. Исходные коды этого проекта доступны на GitHub ветка codebehind

Фрагмент файла разметки главной страницы MainPage.xaml