【问题标题】:Do you have to use commands to follow the MVVM pattern?你必须使用命令来遵循 MVVM 模式吗?
【发布时间】:2015-03-29 21:38:47
【问题描述】:

我正在学习和理解 WPF 编程中使用的 MVVM 模式的理论和用法。

来自 WinForms,我仍然倾向于只双击一个按钮来将我带到单击的事件处理程序。

在线阅读有关 MVVM 的信息,显然这应该永远不要这样做,因为,嗯……我不确定。建议使用 ICommand 接口来封装 UI/View 调用的操作。

我还没有阅读为什么这是首选。如果您使用事件处理程序,您仍然不会破坏 View/ViewModel 关系,因为 ViewModel 仍然对 View 一无所知...对吗?

使用命令是否会提供一些事件处理程序不提供的额外灵活性?如果有的话,我觉得使用命令会使代码更加混乱,因为您必须回溯才能找到 ICommand 逻辑。使用事件处理程序,它就在 View 后面的代码中。我错过了什么吗?

那么,本质上,使用事件处理程序而不是命令是否违反了 MVVM 模式?

【问题讨论】:

  • 首先,ICommand 提供了CanExecute 的功能(即根据布尔值自动启用或禁用按钮)。我不确定如何使用事件处理程序使其变得顺畅。

标签: c# wpf mvvm icommand


【解决方案1】:

使用事件处理程序,一切都在 View 后面的代码中。

这正是您必须避免的。

您的应用程序的逻辑(或者更糟糕的是,您的业务逻辑)不属于 UI,也不应该放在后面的代码中。这就是存在 ViewModel 命令的原因。

当然,如果您的按钮触发动画或执行任何其他特定于 UI 的任务,那么处理事件处理程序并将该代码放入 UI 是有意义的。

是的,如果您来自 winforms,则进行适当的关注点分离并避免混合 UI 和应用程序的其余部分一开始可能看起来有点复杂,但一旦您了解这如何有助于产生非常干净的效果,它就会真正得到回报代码,以及如何在无需更改应用逻辑中的一行代码的情况下实现 100% 自定义 UI。

还有,你的感觉

你必须回溯才能找到 ICommand 逻辑

也是由于你的 winforms 背景,你的注意力集中在 UI 上,你以 UI 为中心的方式来推理你的代码。在 WPF 中,UI 是我通常构建的最后一个东西,因为它只是我已经以 Models 和 ViewModels 的形式构建的数据和逻辑的不言而喻的体现。我的注意力不是放在 UI 上,而是放在我的应用程序处理的实际数据和逻辑上。

这意味着我不会花很多时间研究 UI 特定的类,而不是 UI 特定的问题,例如动画和交互性。

【讨论】:

  • +1,因为我几乎同意所有内容,除了“是否执行任何特定于 ui 的任务”-我认为“应该”由行为/触发器/样式等处理,而不是通过后面的代码处理 :)
  • @Default 触发器和样式不能做某些事情(例如复杂的动画序列等),行为只对可重用的东西有意义。有时可以在后面使用代码。
【解决方案2】:

这真的取决于你想在按钮点击上做什么。

如果您只想与 U.I. 进行交互。 (例如更改控件的可见性或其他属性)然后只有顽固的 MVVM 纯粹主义者会反对。

但是,如果您想做与模型或其他数据相关的任何事情,那将违背 MVVM 在关注点分离方面所代表的一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多