【问题标题】:designing model in MVVM and WPF and state management在 MVVM 和 WPF 中设计模型和状态管理
【发布时间】:2011-04-14 16:00:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf mvvm viewmodel


    【解决方案1】:

    按照您的建议,编辑模型对象的克隆可以解决问题。

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

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

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

    【讨论】:

    • 太好了,我会提出第三个建议(在 VM 中有一个不是模型的属性),因为这听起来最简单。谢谢!
    猜你喜欢
    • 2023-03-22
    • 2016-07-17
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多