wpf - 在 MVVM 和 WPF 中设计模型和状态管理

标签 wpf mvvm viewmodel

在我的 WPF 应用程序中,我使用的是 MVVM。我正在从 XML 文件中读取,将其反序列化为对象模型并将其保存在内存中。

XML 文件->BusinessObjectModel(Model)->ViewModel

每当 View 模型需要模型时,我都会从内存中提供它。我的问题是当我在 View 中使用模型元素时,它正在更新内存中的模型(显然!)。我不想这样做,我希望仅当用户在 View (或对话框)中单击“确定”时更新模型。它通常是如何实现的?我应该只为 View 模型提供模型的克隆而不是原始引用吗?

最佳答案

正如您所建议的,编辑模型对象的克隆将解决问题。

另一种方法是让属性绑定(bind)使用 UpdateSourceTrigger显式的。单击保存后,您将以编程方式对每个绑定(bind)表达式调用 UpdateSource。这需要一些额外的代码,这些代码属于 View 的代码隐藏,因为它是操作 UI 元素的代码。

还要考虑在您的 VM 上为 View 中公开的每个属性设置一个属性,其中 VM 属性的支持字段不是包装模型对象的相应属性。当用户单击保存时,您可以将 VM 中的每个属性分配给模型对象。自然地, View 中的控件将绑定(bind)到 VM 属性,而不是模型属性。这实际上就像有一个克隆,没有在模型层支持克隆的额外包袱。

我并不是说这些选项中的任何一个更好或更坏。这完全取决于使用它们的上下文。

关于wpf - 在 MVVM 和 WPF 中设计模型和状态管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666071/

相关文章:

mvvm - 如何在 MVVM 中动态创建列

c# - 我想在 MVVM 中使用 ListBox 的 SelectionChangeEvent

class - MVVM View 模型命名

c# - 使用 AutoMapper 创建 DateTime

wpf - 为什么WPF中的帧率不规则且不受监视刷新的限制?

c# - mvvm light Messenger.Default.Register 查看代码隐藏?

wpf - 如何在DataTrigger中延迟Setter生效0.5秒?

android - 由 : java. lang.RuntimeException : Cannot create an instance of class com. app.MyViewModel 引起

.net - 将静态方法绑定(bind)到 CheckBox 并将参数传递给它

c# - WPF C# DataGrid 绑定(bind)不同类型的列表