Сердцем паттерна MVVM является Модель, которая является структурой ваших данных. Таким образом, у вас есть Модель контакта и Модель сообщения, которые связаны и хорошо установлены. Теперь вы хотите создать свой интерфейс. Пользовательский интерфейс содержит одно окно (MainView). Таким образом, вам понадобится одна ViewModel. Так из чего состоит ViewModel?
Предположим, что вы хотите отобразить только один контакт в главном окне, а не коллекцию. Теперь ваша MainViewModel может просто иметь ссылки на свойства вашего контакта, которые должны быть представлены в представлении.
Contact c = /*Retrieve a contact from db*/;
ContactName = c.Name; //Create these two properties
ContactPhone = c.Phone; //Assuming only these two properties are required by your view
Теперь вы можете привязать эти свойства к вашему MainView следующим образом
<Textbox Text={Binding ContactName} /> <!-- Assuming the DataContext is assigned -->
<Textbox Text={Binding ContactPhone} />
Но мы должны отобразить коллекцию в нашем MainView. Следовательно, мы определяем индивидуальный список как новый вид. Нам также нужен список ContactName и ContactPhone. Следовательно, мы оборачиваем эти два свойства в класс и составляем его список. Этот класс называется ViewModel.
(Здесь вы также должны добавить сообщения собственности)
Следовательно, отдельные представления имеют свою собственную модель представления. Теперь мы интегрируем эти представления в наш MainView.
Теперь, что должен содержать MainViewModel?
- Список ContactViewModels - ContactList
- Выбранный ContactViewModel - ВыбранныйКонтакт
- Список MessageViewModels - SelectedContactMessageList
Как они подключены?
- ContactList - привязан к списку контактов
- SelectedContactMessageList - привязан к списку сообщений
- SelectedContact - привязан к SelectedItem списка контактов. Сеттер должен изменить SelectedContactMessageList в соответствии с Selection следующим образом:
SelectedContactMessageList.Clear();
foreach (Message message in SelectedContact.Messages)
{
SelectedContactMessageList.Add(new MessageViewModel(message))
}// converting the resulting models from SelectedContact.Messages to viewmodels
Вот и все. Вот как я понял MVVM.
А по поводу
Каждый объект ViewModel будет содержать одну соответствующую модель, верно?
Нет! Вместо каждый вид отображается на одну ViewModel
Создайте ViewModel для каждого View в вашем приложении и имейте только те свойства, которые требуются вашему View, в вашей ViewModel.