如何在WPF / MVVM中将两个列表视图的不同选择绑定到相同的实例

时间:2012-02-23 00:25:55

标签: c# wpf listview mvvm window

我正在使用WPF和MVVM。 在我的应用程序中,最好从主屏幕中选择一个项目,然后按一个按钮查看详细信息。应该打开一个新窗口,并且可以在列表视图中进行(多个)选择,其中IsSelected绑定到ObservebleCollection中的项目。

当用户再次按下该按钮时(对于主屏幕上的相同选择),将打开另一个具有相同细节的窗口。但是,我假设如果进行了不同的选择,则同步第一个窗口并显示相同的选择。

我希望两个窗口可以选择不同。这是可能的,应该做些什么才能使其发挥作用?

更新: 例如:让我说我有一辆带4个轮子的车(收藏品)。两个窗口中的列表视图显示了4个轮子(一个项目是一个轮子)。当我在列表视图中选择第1轮和第2轮时,我想在另一个窗口中也会选择第1轮和第2轮。但我想在窗口2中选择3和4,在窗口1中选择1和2轮)。而且我不想添加另外4个轮子的集合,否则我会有一个带8个轮子的车......或者2个带4个轮子的车但是如果我改变第3轮和第4轮,它将只改变第二辆车。

更新2: 顺便说一句,在我的应用程序中:

  • 我有0到n个带列表视图的窗口。
  • 我创建了一个包含视图模型的窗口。
  • 每个视图模型都引用了真实的'模型。

所选项目的绑定变量在真实模型中,我想我需要将其移动到视图模型,但我不知道如何。因为(示例中的车轮)的属性在“真实”中。模型和那些也绑定在相同的列表视图(项目)。 我c

2 个答案:

答案 0 :(得分:1)

如果两个列表都绑定到同一个集合(即相同的引用),或者绑定到包含相同对象实例的集合,则两个窗口将仅同步。因此,每个视图模型都需要自己独立的集合。

答案 1 :(得分:1)

如果只有两个列表,则可以将IsSelected绑定到两个单独的属性(即IsSelectedInList1,IsSelectedInList2)。

但实际上,viewmodel应该是UI的代码内视图表示。因此,如果您的UI中有两个(或N个)列表副本应该具有不同的状态,那么在内存中创建该视图模型的两个(或N个)副本以表示它是有意义的。

  

而且我不想添加另外4个轮子的集合,否则我会有一个带8个轮子的车......或者2个带4个轮子的车但是如果我改变第3轮和第4轮,它将只改变第二辆车

我认为在考虑你的模型时更是如此。在您的模型中,您需要一个特定汽车的一个实例,并且该汽车应该有一个四个轮子的集合。但是如果你想要两个不同的视图(具有不同的状态),可以从该模型创建两个视图模型。