【问题标题】:How to move IsSelected for MVVM out of the business objects?如何将 IsSelected for MVVM 移出业务对象?
【发布时间】:2012-08-31 11:53:38
【问题描述】:

我在 C#/WPF 中有一个相当大的应用程序,使用 MVVM(有点)。 在列表视图中,我使用 IsSelected 绑定到所选项目。这些 IsSelected 属性位于我的应用程序的模型中,而不是在 ViewModel 中。

目前我只有一个视图模型指向业务对象中的一个列表(模型,而不是视图模型),但将来我可能想更改它,并且模型内的 IsSelected 属性不再可能(否则两者ViewModel 将具有相同的选定项)。

选择模式是多重的,范围可以在 1 到 128(列表的最大长度)项之间。

我认为它应该以某种方式在视图模型中,但我应该如何实现呢?

【问题讨论】:

  • 是的,它应该在虚拟机中。发布(部分)您的代码,以便我们有一个想法。
  • SelectionMode 是什么?如果你有一个单一的选择模式,即每次只能选择一个项目,我经常使用SelectedItem(项目是你集合中的东西)作为一个属性,它与集合位于同一个ViewModel 中。真正取决于您对所选项目的操作。

标签: c# wpf listview mvvm viewmodel


【解决方案1】:

使用 MVVM 时,您不限于单一视图模型。是的,您可以从您的视图模型公开部分模型,但您也可以公开其他视图模型。

在这种情况下,我建议将集合的实例包装在其自己的视图模型中,并将您的项目模板的绑定根设置为此。

例如,如果您要将数据绑定到模型集合,则可以将每个模型的实例传递给封装模型的视图模型,然后公开IsSelected 以绑定到视图模型。

【讨论】:

  • +1 我在这个问题前几天问了一个类似的问题,并建议将 IsSelected 添加到我的模型中。希望我早点看到这篇文章!
猜你喜欢
  • 2010-10-19
  • 2019-01-29
  • 2014-02-22
  • 2021-09-07
  • 2012-05-22
  • 2010-12-24
  • 2017-01-12
  • 2020-05-31
  • 1970-01-01
相关资源
最近更新 更多