wpf - 在MVVM View 模型中哪里处理逻辑?

标签 wpf mvvm controller logic viewmodel

在初步了解WPF和MVVM之后,我目前正在为数字IO Controller 开发小型调试应用程序。在此应用程序中,我有一个 View 模型树,如下所示:

IOControllerViewModel> ConfigurationViewModels> PortViewModels> ChannelViewModels

这对应于业务对象,其中IOController包含一组配置,然后包含一个配置列表,然后包含一个端口列表,该列表随后包含一个 channel 列表,这些 channel 最终代表了IO Controller 的输入/输出 channel 。

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

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

  • 将登录名放入ChannelViewModel中。因此通过
    必要的业务对象从我的根源一直到叶子。
  • 将逻辑放入IOControllerViewModel中。因此,一个事件或
    类似的东西必须由ChannelViewModel触发,然后
    由IOControllerViewModel处理。
  • 介绍一个 Controller ,该 Controller 负责任何逻辑和
    将 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/

    相关文章:

    wpf - 单击时使TabItem选择第一个嵌套按钮(WPF MVVM)

    ruby-on-rails - 为类调用私有(private)方法选择 - Rails

    configuration - 在 RetroPie 中配置 N64 Controller

    wpf - 如何在MVVM中使用工具提示实现Command?

    wpf - 如何使用 MVVM Light for WPF 在窗口中导航?

    java - 使用单个 Controller 调用服务依赖于 PathVariable

    c# - 将 StaticResource 的值传递给组合字符串中的 ConverterParameter

    c# - MVVM 必须使用 DataTemplates 吗?

    c# - 如何为 Prism 7 应用创建 Spec-Flow 测试?

    c# - 禁用从文本框拖放