gpt4 book ai didi

c# - 在哪里创建/获取/缓存 ViewModels?

转载 作者:行者123 更新时间:2023-11-30 12:50:52 25 4
gpt4 key购买 nike

首先,我是 MVVM 的新手,所以请帮我解决这个问题:)

假设我的应用中有多个 View 。就我而言,我有一个编辑器 View 和一个浏览器 View 。他们都必须使用我正在编辑的“节点”的 View 模型。

那么 viewmodel 实际上是在哪里创建的?

假设编辑器被告知编辑某个节点 - 它可以创建一个新的“NodeViewModel”并使用它。但与此同时,还有一个 NodeBrowserView,它允许人们通过快捷方式选择不同的节点。基本上 - 我需要 EditorView 使用与 BrowserView 相同的 ViewModel,所以我需要一个通用的“GetViewModelfor(X)”方法。

那么这应该如何工作? :)

干杯:)

最佳答案

您的编辑器 View 和浏览器 View 都应该在某种类型的NodeViewModel 上运行。 .您不应该仅仅为了不同的 View 场景而需要单独的 View 模型。

现在,您可以编辑not-yet-shown-to-user 节点吗?如果不是(例如,用户决定编辑什么), View 模型应该在第一次需要将其内容呈现给用户时创建。在大多数情况下,这会出现在某些浏览器/详细信息 View 中,以便用户可以选择元素,然后然后选择对其进行编辑。

编辑:

关于您的评论。 NodeViewModel应提供给编辑器 View

提供 部分可以通过例如 constructor injection 完成或者通过手动设置 View 的数据上下文。例如,当用户在浏览器 View 中浏览所有节点时,他可以双击列表项,编辑器 View 将弹出:

// this will probably be done in response to event
private void ListItemDoubleClick(object sender, EventArgs e)
{
NodeViewModel currentItem = // extract current list item
EditorView editorView = new EditorView(currentItem);
editorView.Show();
}

或者,如果你想避免 CompositeView 之间的这种强耦合和 EditorView您可以随时使用事件,但并不总是必要的。

我在设计方面考虑的另一件事是添加额外的 View 模型,称之为 NodesListViewModel .程序流程可能是这样的:

  1. 在应用程序启动时,获取您的节点(来自数据库、文件、服务等)
  2. 创建 NodeListViewModel 的实例它依赖于 IList<Node> (节点实体列表)
  3. NodeListViewModel将构建并公开 NodeViewModel 的集合元素
  4. 创建使用复合 View 的主程序窗口的实例。它需要 NodeListViewModel作为其数据上下文。
  5. 每当用户决定他需要编辑项目时,一切就绪。浏览器有所有 NodeViewModels 的列表,它可以轻松获取电流并将其传递给专用 View 。

关于c# - 在哪里创建/获取/缓存 ViewModels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198887/

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