使用MVVM Light的消息传递ObservableCollection时,是传递了副本还是传递了引用?

时间:2016-01-29 20:16:25

标签: mvvm-light observablecollection messaging

我们正在使用MVVM Light开发新的WPF应用。我们有一个自定义的ObservableCollection,它开始被绑定到数据网格。根据项目的规范,我们必须从显示datagrid的表单开始,然后当用户选择一行时,我们向用户显示另一种形式的详细视图。此时,我们将获取所选行并将其分配给我们分配给MVVM Light消息的对象,以便详细视图能够显示记录的详细信息。

现在我们已经遇到了这个问题,我们遇到了并发症。规范要求详细视图能够在集合中导航,即使此时它没有集合。我们已经通过我们定义的接口来完成此操作,我们调用了IRecordService,为我们使用的每种类型的记录实现它。然而问题是记录不知道它是否是集合中的第一个记录,最后一个记录等等。由于细节表单上的按钮,人们可以浏览集合,因此这是必要的。我们一直试图用例如CustomerRecordService来做这件事,但到目前为止还没有解决。如果我们坚持下去,也许会这样。

但我一直在想,如果不是创建一个包含所选记录的对象而不是传递给消息,我们会将整个集合和所选记录的密钥传递给消息,然后被详细视图模型捕获?我的同事主要担心的是在这种情况下ObservableCollection是如何通过的?传递了ObservableCollection的副本还是列表视图模型中对ObservableCollection的引用?我认为这是一个参考,但想要确保我是对的,不是。

1 个答案:

答案 0 :(得分:1)

它必须只是一个参考。否则,messenger必须知道如何克隆每个对象。但你可以轻松检查它。在详细信息视图模型中获取对象后,请进行更改。添加内容,删除内容并更改集合中某些对象的某些参数。然后检查主网格中是否已更改它。