Prism单实例视图模型,由多个视图使用

时间:2017-05-18 13:27:08

标签: c# wpf mvvm module prism

我有一个相对复杂的模块化应用程序,看起来非常适合Prism库和Shell / Module架构。

我很想知道以下可能性:

我的应用程序将连接到许多物理设备,对于此示例,我想通过RS232连接到Laser。我只需要一些激光器执行的方法,例如Connect,GetHeight,SendCommand和Disconnect。因此,所有这些都应该在激光课程中定义。

现在,我需要一个LaserModule将有多个视图遍布我的应用程序。 One View可能会使用GetHeight不断轮询激光并显示值,另一个View可能是一个简单的按钮,可以执行单个GetHeight并在对话框中显示结果。另一个视图可能只是另一个按钮,它被添加到列表视图区域(在其他模块视图中),单击该按钮时会转到LaserModule的设置视图。

据说,每个LaserModule只能有一个激光类实例,因为我只能连接一次RS232端口。此外,我想象所有视图将共享相同的(单实例)ViewModel,因为许多功能在不同的视图中共享。

这有什么意义吗?我将拥有许多区域,但是当我在这些区域中来回切换视图时,我从不想创建超过每个视图/视图模型的一个实例。

最后,应用程序应该能够为每个物理连接的激光器处理多个LaserModule(但是每个激光器都有自己独立的单实例视图/ ViewModel集合)。

非常感谢任何见解,这张图大致总结了我尝试做的事情:Laser Views

1 个答案:

答案 0 :(得分:0)

您将获得激光服务,并将其作为单身注册在容器中。然后您的ViewModel将使用该服务。不要试图拥有单例ViewModels。那是在惹麻烦。