在初步了解WPF和MVVM之后,我目前正在为数字IO Controller 开发小型调试应用程序。在此应用程序中,我有一个 View 模型树,如下所示:
IOControllerViewModel> ConfigurationViewModels> PortViewModels> ChannelViewModels
这对应于业务对象,其中IOController包含一组配置,然后包含一个配置列表,然后包含一个端口列表,该列表随后包含一个 channel 列表,这些 channel 最终代表了IO Controller 的输入/输出 channel 。
但是现在我的问题是在哪里处理“逻辑”?
例如,我想切换输出 channel 的状态。 IOControllerViewModel当前是唯一的实例,该实例具有对业务对象的引用,该实例包含所需的ToggleChannel()方法。现在我看到三个选项:
必要的业务对象从我的根源一直到叶子。
类似的东西必须由ChannelViewModel触发,然后
由IOControllerViewModel处理。
将 Controller 发布到所有 View 模型。
非常感谢!
最佳答案
通常,我将逻辑放在使用它的层上,并使用消息传递系统(例如PRISM的EventAggregator
或MVVM Light的Messenger
)在ViewModel之间进行通信。 (如果您有兴趣,我就此here撰写了一篇简短的文章)
在您的情况下,这取决于处理登录的层。例如,如果LoginViewModel成功验证了用户身份,它将广播包含相关参数的类似UserAuthenticated
消息的消息。然后,感兴趣的ViewModel可以订阅UserAuthenticated
消息,并进行相应的处理。
请记住,使用MVVM,您的ViewModels是您的应用程序。该应用程序应该运行得很好,根本没有任何 View (例如来自测试脚本)
关于wpf - 在MVVM View 模型中哪里处理逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271777/