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

时间:2011-04-14 16:00:16

标签: wpf mvvm viewmodel

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

XML文件 - > BusinessObjectModel(模型) - > ViewModel

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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