MVVM 模式的核心是模型,它是数据的结构。所以你有联系模型和消息模型,它们是相关的并且设置得很好。现在你想设计你的界面。 UI 包含一个窗口(MainView)。所以你需要一个 ViewModel。那么 ViewModel 是由什么组成的呢?
让我们假设您只想在 MainView 中显示一个联系人,而不是一个集合。现在,您的 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。
(这里你还要添加 Messages 属性)
因此,各个视图都有自己的视图模型。现在我们将这些视图集成到我们的 MainView 中。
现在 MainViewModel 应该包含什么?
- ContactViewModel 列表 - ContactList
- 选定的 ContactViewModel - SelectedContact
- MessageViewModel 列表 - SelectedContactMessageList
这些是如何连接的?
- ContactList - 绑定到 Contact ListView
- SelectedContactMessageList - 绑定到消息列表视图
- SelectedContact - 绑定到联系人 ListView 的 SelectedItem。 setter 应该像这样根据 Selection 修改 SelectedContactMessageList
SelectedContactMessageList.Clear();
foreach (Message message in SelectedContact.Messages)
{
SelectedContactMessageList.Add(new MessageViewModel(message))
}// converting the resulting models from SelectedContact.Messages to viewmodels
就是这样。这就是我对 MVVM 的理解。
关于重点,
每个 ViewModel 对象都将包含一个对应的模型,对吧?
不!相反,每个 View 都映射到单个 ViewModel
为您的应用程序中的每个视图创建一个 ViewModel,并在您的 ViewModel 中仅包含您的视图所需的那些属性。