Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将两个ListView的不同选择绑定到WPF/MVVM中的相同实例_C#_Wpf_Listview_Mvvm_Window - Fatal编程技术网

C# 如何将两个ListView的不同选择绑定到WPF/MVVM中的相同实例

C# 如何将两个ListView的不同选择绑定到WPF/MVVM中的相同实例,c#,wpf,listview,mvvm,window,C#,Wpf,Listview,Mvvm,Window,我正在使用WPF和MVVM。 在我的应用程序中,最好从主屏幕上选择一个项目,然后按下按钮查看详细信息。应打开一个新窗口,并且可以在列表视图中进行(多个)选择,其中IsSelected绑定到ObservebleCollection中的项 当用户再次按下该按钮时(对于主屏幕上的相同选择),将打开另一个具有相同详细信息的窗口。但是,我假设如果进行了不同的选择,则会同步第一个窗口并显示相同的选择 我想有两个窗口可能有不同的选择。这是可能的吗?应该采取什么措施使其发挥作用 更新: 例如:假设我有一辆四轮汽

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

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

我想有两个窗口可能有不同的选择。这是可能的吗?应该采取什么措施使其发挥作用

更新: 例如:假设我有一辆四轮汽车(系列)。两个窗口中的列表视图都显示了4个控制盘(一个项目是一个控制盘)。当我在列表视图中选择控制盘1和2时,我想在另一个窗口中也会选择控制盘1和2。但我想在窗口2中选择3和4,在窗口1中选择滚轮1和2)。我不想再增加4个轮子的集合,否则我会有一辆8个轮子的车。。。或者两辆车有四个轮子,但是如果我换了三轮和四轮,它只会换第二辆车

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

  • 我有0到n个带有列表视图的窗口
  • 我创建了一个包含视图模型的窗口
  • 每个视图模型都引用“真实”模型
选定项的绑定变量在真实模型中,我想我需要将其移动到视图模型中,但我不知道如何移动。因为(示例中控制盘的)属性位于“真实”模型中,并且这些属性也绑定在同一列表视图(项)中。
只有当两个列表都绑定到同一集合(即同一引用)或绑定到包含相同对象实例的集合时,这两个窗口才会同步。因此,每个视图模型都需要自己的独立集合。

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

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

我不想再增加4个轮子的集合,否则我会有一辆8个轮子的车。。。或者两辆车有四个轮子,但是如果我换了三轮和四轮,它只会换第二辆车


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

是的,但事实正是如此。我在问题中举了一个例子来说明问题。这意味着我拥有相同的收藏,但对于上面的汽车示例,我希望说明拥有相同的收藏是很直观的。我对它投了更高的票,因为它证实了我的猜测,即列表视图选择将同步,但是。。。如何不同步它,而是使用相同的模型/对象实例?两个列表只是一个示例,事实上,我可以有0个、1个或多个带有listview的窗口,所有窗口都使用相同的基础模型(在我的示例中是汽车)。我知道我需要两个视图模型,但是这些视图模型应该引用同一个模型(汽车)。。。或者,当某些内容发生更改时,我是否应该同步所有模型(在我的示例中,所选项目和控制盘除外)?因此,您希望列表中的控制盘保持同步(选择状态除外)?您可以创建一个具有IsSelected属性的包装器viewmodel,以及对控制盘本身的引用。每次显示新列表时,都可以构建这些包装器的新集合。在绑定中,您可以说Wrapper.IsSelected和Wrapper.Wheel.SomeProperty.SomeProperty,听起来可能是这样,但这会使我的模型(视图)更加复杂。(如果你不介意的话,我会等着接受答案,直到我检查它是否有效)。我现在不打算实施这个,因为这是太多的工作,但是,知道解决方案很好。。。现在我要阻止打开两个显示模型相同部分的窗口。