2011-04-14 86 views
2

在我的WPF应用程序中,我使用的是MVVM。我正在读取一个XML文件,将其反序列化为一个对象模型并将其保存在内存中。在MVVM和WPF中设计模型和状态管理

XML文件 - > BusinessObjectModel(型号) - >视图模型

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

回答

4

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

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

另请考虑在虚拟机中为视图中显示的每个属性设置属性,其中VM属性的后台字段为而不是包装的模型对象的相应属性。当用户单击保存时,您可以将每个属性从VM分配给Model对象。自然,View中的控件将绑定到VM属性,而不是Model属性。这实际上就像拥有一个克隆一样,没有在模型层中支持克隆的额外行李。

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

+0

太好了,我会为第三个建议(在虚拟机中有一个不属于模型的属性),因为这听起来是最简单的。谢谢! – Jimmy 2011-04-14 17:05:57