2016-01-29 57 views
0

我们正在使用MVVM Light开发新的WPF应用程序。我们有一个自定义的ObservableCollection,它以绑定到数据网格开始。根据项目规范,我们必须从显示数据网格的表单开始,然后当用户选择一行时,我们以另一种形式向用户显示详细信息视图。在这一点上,我们得到选定的行并将其分配给我们分配给MVVM Light消息的对象,以便详细视图将能够显示记录的详细信息。使用MVVM Light的消息传递ObservableCollection时,是通过传递的副本还是传递的引用?

现在我们正在进入这个领域,我们遇到了一个复杂问题。规范要求详细信息视图能够浏览集合,尽管此时它没有集合。我们已经完成了,我们可以通过一个接口来完成这个任务,我们定义了我们称之为IRecordService的方法,并为我们使用的每种记录类型实现它。然而,问题在于记录不知道它是否是集合中的第一条记录,也就是最后一条记录等等。由于细节表单上的按钮可以让用户浏览集合,因此这是必要的。我们一直在努力做到这一点,例如CustomerRecordService,但到目前为止还没有解决。如果我们坚持下去,也许会这样。

但我一直在想,如果不是创建一个具有所选记录的对象,而是将其传递到消息中,而是将整个集合和所选记录的关键字传递给消息,然后被详细视图模型捕获?在这种情况下,我的同事首要关心的是ObservableCollection如何通过?传递ObservableCollection的副本还是引用列表viewmodel中的ObservableCollection?我会认为它是一个参考,但是想要确保我是对的,或者不是。

回答

1

它必须只是一个参考。否则,使者将不得不知道如何克隆每一个对象。但你可以轻松地检查它。在您的详细信息视图模型中获取对象后,请更改它。添加一些东西,删除一些东西并更改集合中某些对象的某些参数。然后检查它是否已在网格中的主窗体中更改。

+0

同意这是一个参考。 –