我在去年使用Caliburn.Micro编写了几个MVVM应用程序,但我觉得这个设计模式的某些部分仍在逃避我。
现在,我正在开发一个与设备交互的应用程序。我们假设它包含以下组件:
ShellView / ShellViewModel
- 基本Conductor<T>
绑定到自定义INavigationService
。SelectView / SelectViewModel
- 显示设备列表。ControlView / ControlViewModel
- 与设备互动。现在,从UX的角度来看,我希望SelectView
报告连接到设备时发生的任何错误。但是,从关注点分离的角度来看,SelectViewModel
不应包含设备连接代码,因为它特定于ControlViewModel
。
我之前的解决方案是让SelectViewModel
在导航到ControlViewModel
实例之前调用初始化函数,但这感觉不对,现在我不再使用{{ 1}}。
我确信这归结于我“只是没有得到它”,但在这个例子中我应该把设备连接代码放在哪里?
在做了一些研究之后,我认为我的问题可能是由于对MVVM中模型层的误解造成的。我一直把我的大多数应用程序逻辑放在我的视图模型中,但是我应该把它放在单独的模型中吗?
在这种情况下,我的INavigationService
可以构建SelectViewModel
的实例,处理任何错误,并使用ControlModel
将其注入INavigationService
的属性中