Использование шаблона проектирования MVVM
Цель работы: освоить методику создания приложений с использованием MVVM
Приложение, построенное по шаблону MVVM
В этой лабораторной работе мы рассмотрим пример приложения, построенного с использованием шаблона MVVM. Наш пример основан на примере "Model-View-ViewModel Sample" "Пример приложения, построенного по шаблону модель-представление-модель представления"), http://code.msdn.microsoft.com/Model-View-ViewModel-Sample-8cb92fd9.
В приложении (рис. 23.1.) реализуется механизм наблюдения за игровыми достижениями.
увеличить изображение
Рис. 23.1. Проект приложения, созданного с использованием шаблона проектирования MVVM
На главной странице имеются два списка. В первом выводятся сведения о собранных элементах (Items), во втором – данные о пройденных уровнях. Общая структура проекта, которую вы можете видеть на вышеприведенном рисунке, такова:
В папке Models расположена модель данных (Accomplishment.cs)
В папке ViewModel расположена модель представления, ViewModel.cs
В папке View расположены два представления, ItemView.xaml и LevelView.xaml это – пользовательские элементы управления, настроенные на использование их совместно с системой привязки данных.
В файле StateUtilities.cs объявлен вспомогательный класс, который используется для хранения сведений о том, запущено ли приложение из списка приложений (или с рабочего стола), или оно активировано после того, как пользователь недавно вышел из него.
Страница MainPage.xaml содержит представления, механизмы привязки данных из модели представления и другие вспомогательные механизмы.
В Листинге 23.1 приведен код файла Accomplishment.cs, то есть – модели данных.
using System; using System.ComponentModel; namespace sdkMVVMCS.Model { public class Accomplishment : INotifyPropertyChanged { // Название достижения. public string Name { get; set; } // Тип достижения, Item (элемент) или Level (уровень). public string Type { get; set; } // Количество собранных элементов. private int _count; public int Count { get { return _count; } set { _count = value; RaisePropertyChanged("Count"); } } // Завершен ли уровень private bool _completed; public bool Completed { get { return _completed; } set { _completed = value; RaisePropertyChanged("Completed"); } } public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string propertyName) { if (this.PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } // Создание копии сведений о достижениях для сохранения. // Объект участвует в системе привязки данных, данная копия не участвует public Accomplishment GetCopy() { Accomplishment copy = (Accomplishment)this.MemberwiseClone(); return copy; } } }Листинг 23.1. Код файла Accomplishment.cs