在哪里处理MVVM视图模型中的逻辑



在对WPF和MVVM进行了一些初步阅读之后,我目前正在为数字IO控制器开发一个小型调试应用程序。在这个应用程序中,我有一个视图模型树,它看起来像这样:

IOControllerViewModel> ConfigurationViewModels> PortViewModels> ChannelViewModels

这对应于业务对象,其中IOController包含一组配置,然后包含一个端口列表,然后包含一个通道列表,最终表示IO控制器的输入/输出通道。

但现在我的问题是在哪里处理"逻辑"?

例如,我想切换输出通道的状态。IOControllerViewModel是当前唯一的实例,它具有对业务对象的引用,并且包含所需的togglecchannel()方法。现在我看到三个选项:

  1. 将登录放到ChannelViewModel中。这样就通过了

  2. 将逻辑放入IOControllerViewModel中。因此一个事件或类似的东西必须由ChannelViewModel触发,然后

  3. 引入一个控制器,它负责任何逻辑和将控制器发布到所有视图模型

  4. 还有其他选择吗?最佳实践?

非常感谢!

通常我将逻辑放在使用它的层上,并使用消息传递系统(如PRISM的EventAggregator或MVVM Light的Messenger)在ViewModels之间进行通信。(如果你感兴趣,我在这里写了一篇简短的文章)

在您的示例中,这取决于处理登录的层。例如,如果LoginViewModel成功地验证了用户,它将广播类似UserAuthenticated消息的内容,其中包含相关参数。感兴趣的ViewModels可以订阅UserAuthenticated消息,并相应地处理它们。

记住,使用MVVM,你的ViewModels就是你的应用程序。在没有任何视图的情况下(例如从测试脚本),应用程序应该运行良好

如果我正确理解你的话,你正在使用一个分层结构,它可以只使用一个ViewModel, IOControllerViewModel。所有这些配置、端口和通道都可以是可观察的属性或相应项的集合。

你只需要使用一个IOControllerView,它包含一个ItemsControl来访问所有的配置。在每个配置项的DataTemplate中,你会有一个ItemsControl,它使用端口作为ItemsSource等等。

拥有比需要更多的viewmodel是不好的,特别是当你不需要View的时候,因为你可以使用DataTemplate来代替。

我希望我没弄错。

相关内容

  • 没有找到相关文章

最新更新