gpt4 book ai didi

c# - 每个 MVVM 三元组应该包含什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:48:13 25 4
gpt4 key购买 nike

好的,假设我正在创建一个程序,它将在屏幕左侧的列表框中列出用户联系人。当用户单击联系人时,窗口的主要部分会出现一堆消息或其他内容。

现在我的问题是:MVVM 三元组应该是什么样子的?我有两个模型:联系人和消息。 Contact 模型包含 Message 模型列表。

每个 ViewModel 对象都包含一个对应的模型,对吧?

那么 View 呢?我有一个“MainView”,它是主窗口,其中包含菜单、工具栏等内容。我是否将 ListBox 放在 MainView 中?我的困惑在于把什么放在哪里;例如,ContactView 应该包含什么?只是一个联系人的一个实例?因此,该单个联系人的 DataTemplate、ControlTemplate、上下文菜单、样式等,然后在 MainView 中只有一个包含它们的列表框...?

谢谢。

最佳答案

MVVM 模式的核心是模型,它是数据的结构。所以你有联系模型和消息模型,它们是相关的并且设置得很好。现在你想设计你的界面。 UI 包含一个窗口(MainView)。所以你需要一个 ViewModel。那么 ViewModel 由什么组成?

让我们假设您只想在 MainView 中显示一个联系人,而不是一个集合。现在您的 MainViewModel 可以只引用您的联系人的属性,这些属性将暴露在 View 中。

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

现在您可以像这样将这些属性绑定(bind)到您的 MainView

<Textbox Text={Binding ContactName} /> <!-- Assuming the DataContext is assigned -->
<Textbox Text={Binding ContactPhone} />

但是我们必须在我们的 MainView 中显示一个集合。因此,我们将单个列表项定义为新 View 。我们还需要 ContactName 和 ContactPhone 的列表。因此,我们将这两个属性包装到一个类中并列出它。这个类被称为 ViewModel。

(这里你还必须添加消息属性)

因此,各个 View 都有自己的 View 模型。现在我们将这些 View 集成到我们的 MainView 中。

现在 MainViewModel 应该包含什么?

  • ContactViewModel 列表 - ContactList
  • 选定的 ContactViewModel - SelectedContact
  • MessageViewModel 列表 - SelectedContactMessageList

这些是如何连接的?

  • ContactList - 绑定(bind)到 Contact ListView
  • SelectedContactMessageList - 绑定(bind)到 Message ListView
  • SelectedContact - 绑定(bind)到 Contact 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 的理解。

关于重点,

Each ViewModel object will contain a single corresponding Model, right?

不!相反,每个 View 都映射到单个 ViewModel

为您的应用程序中的每个 View 创建一个 ViewModel,并在您的 ViewModel 中仅包含您的 View 所需的那些属性。

关于c# - 每个 MVVM 三元组应该包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com