MVVM最佳实践 - 直接在模型列表成员的引用上工作或制作副本?

时间:2012-09-06 04:09:36

标签: c# mvvm reference deep-copy

假设我有一个模型,它为我提供了一个属性,它是自定义对象列表。该模型是一个单例,我将此属性的引用提供给ViewModel。这些自定义对象具有例如布尔属性。现在,用户通过单击视图并操作模型中的引用来更改这些值。因此,我的模型中的列表不会更改,因此除非我为每个列表成员实现事件处理,否则模型不能通知其他视图。

另一方面,如果我指定一个完整的新列表,我的模型会通知其他人。

问题是:对我的模型的引用进行处理或者每个ViewModel是否应该对列表内容进行深层复制并稍后为模型分配一个完整的新列表是一般的好主意。如果不是,我应该为模型中列表的每个成员添加事件处理吗?

顺便说一下。 ObservableCollection不是选项,因为它不检测项目更改,我认为通用模型应该使用Ilist接口。

1 个答案:

答案 0 :(得分:2)

您的问题没有直接的答案,这完全取决于您希望应用程序的行为方式。

如果您希望用户所做的任何更改在应用程序中立即生效,那么您应该直接处理模型返回的引用。但是在用户手上,您必须处理应用程序主动更改列表并通知用户的情况。

另一方面,如果您希望通过按“应用更改”按钮来验证用户所做的任何修改,则克隆列表的选项可能是最佳选择。