绑定到包含集合/列表的模型

时间:2009-11-20 17:36:12

标签: wpf collections mvvm

我正在构建一个简单的财务记录保存应用程序。主窗口视图模型包含一个帐户列表。该视图显示此列表(在ListView中)以及显示有关当前所选帐户的详细信息的面板。

首先,我将详细信息面板和ListView的SelectedItem绑定到视图模型上的相同属性(类型为Account)。但是,我很快意识到细节面板需要绑定到AccountViewModel,而不是直接绑定到Account的实例。

提供此AccountViewModel的方法有多种:

  • 将详细信息面板绑定到视图模型上的单独属性。当ListView的SelectedItem发生更改时,视图模型应创建此新属性并将其设置为与所选帐户关联的AccountViewModel实例
  • 为主视图模型提供AccountViewModel 列表,而不是“帐户”列表。列出所有帐户的ListView和详细信息面板都可以绑定到主视图模型上的相同属性。
  • 拥有一个AccountViewModel,更改其引用的帐户,每次更改ListView的SelectedItem属性。

还有其他选择吗?你推荐哪种选择?

谢谢你, 本

3 个答案:

答案 0 :(得分:1)

这就是我的所作所为:

  

为主视图模型提供一个列表   AccountViewModels而不是   帐户清单。

这将在很多方面为您提供良好的服务。我总是发现,最终,由于某种原因,我需要以某种方式扩充我的模型以支持View,所以这些天我只是通过创建ViewModels开始。

你可以说这将是一个更好的选择,它涉及更少的代码。在我看来,更少的代码总是等于更少的错误。

答案 1 :(得分:0)

我喜欢这个选项

  • 将详细信息面板绑定到单独的 视图模型上的属性。什么时候 ListView的SelectedItem发生了变化 视图模型应该创建并设置它 一个实例的新属性 与之关联的AccountViewModel 使用所选帐户。

然后您可以将所选项目绑定到视图模型和详细信息窗格。这可以独立于视图进行测试。当您创建帐户列表时,您还可以创建帐户视图模型列表,因此当您更改选择时,您无需创建任何内容。通过这种方式,您的viewmodel是全面的,代表整个屏幕,而不仅仅是viewModel的浮动位。

答案 2 :(得分:-1)

到目前为止,我最喜欢的想法是原始帖子中的#3为两个原因:

  • 它有1个视图模型对应视图,我认为最适合M-V-VM模式。
  • 由于帐户视图模型被告知何时更改以显示其他帐户的详细信息,因此它可以询问用户是否希望保存未保存的编辑,然后再更改为显示新帐户(等)。