Прежде всего, MVVM - это разделение проблем вашего кода в соответствующей области. Например, общение с вашей базой данных через EF должно быть сделано в модели 1 . ViewModel отвечает за хранение данных, а также за их формирование или массирование, чтобы сделать их более подходящими для отображения (т.е. преобразование перечислений в цвета 2 и т. Д.).
Чтобы реализовать ваши функциональные возможности в MVVM-формате, вам нужно будет использовать привязку и привязать вашу модель представления к вашему представлению:
<MyControl>
<LayoutRoot>
<ListBox ItemsSource={Binding MyItems} SelectedItem={Binding MySelection} />
</LayoutRoot>
</MyControl>
в коде для просмотра:
public class MyControl
{
public MyControl()
{
this.DataContext = new MyViewModel();
}
}
и ваша ViewModel будет выглядеть примерно так:
public class MyViewModel : INotifyPropertyChanged
{
public ObservableCollection<MyDataObject> MyItems
{
get { return _myItems; }
set
{
_myItems = value;
OnPropertyChanged("MyItems");
}
}
public MyDataObject MySelection { get; set; }
public void DoSomethingWithDatabase()
{
Model.DoSomething(MySelection);
}
}
Это просто ОЧЕНЬ простой пример, чтобы проиллюстрировать, что требуется, если вы делаете вещи способом MVVM (и я намеренно пропустил кучу вещей). Чтобы сделать правильный пример и задокументировать все необходимые элементы, которые вам нужно знать, потребуется по крайней мере глава в книге, поэтому я отошлю вас к статье MSDN для дальнейшего чтения: Реализация представления модели -Model Pattern .
1 И Модель может быть просто ступенькой, если вы также внедрите SOA, Модель может просто вызвать сервис, который затем обращается к базе данных.
2 Это также можно сделать с помощью преобразователей в представлении, но это не всегда возможно и практически невозможно в преобразователе.