Использование шаблона проектирования 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
