你必须使用命令来遵循 MVVM 模式吗?
Do you have to use commands to follow the MVVM pattern?
我正在学习和理解 WPF 编程中使用的 MVVM 模式的理论和用法。
来自 WinForms,我仍然倾向于双击一个按钮将我带到单击的事件处理程序。
在线阅读有关 MVVM 的内容,显然 永远不要这样做 ,因为,好吧...我不确定。建议使用 ICommand 接口来封装 UI/View.
调用的动作。
我还没有读懂为什么这是首选。如果您使用事件处理程序,您仍然没有打破 View/ViewModel 关系,因为 ViewModel 仍然对 View 一无所知...对吧?
使用命令是否会提供一些事件处理程序所不具备的额外灵活性?如果有的话,我觉得使用命令会使代码更加混乱,因为您必须回溯才能找到 ICommand 逻辑。使用事件处理程序,它就在视图背后的代码中。我错过了什么吗?
那么,从本质上讲,使用事件处理程序而不是命令是否违反了 MVVM 模式?
With event handlers, it's all right there in the code behind the View.
这正是您必须避免的。
您的应用程序的逻辑(或者更糟糕的是,您的业务逻辑)不属于 UI 并且永远不应放在代码后面。这就是存在 ViewModel 命令的原因。
当然,如果您的按钮触发动画或执行任何其他 UI 特定任务,那么是的,处理事件处理程序并将该代码放在 UI 中是有意义的。
是的,如果您来自 winforms,请正确分离关注点并避免将 UI 与您的应用程序的其余部分混合在一起,一开始可能看起来有点复杂,但一旦您理解它就会真正得到回报这如何帮助生成非常干净的代码,以及如何 100% 自定义 UI 而无需更改应用程序逻辑中的一行代码。
另外,你的感觉
you have to backtrack to find the ICommand logic
也是由于您的 winforms 背景,您的注意力集中在 UI 并且您以 UI 为中心的方式推理您的代码。在 WPF 中,UI 是我通常构建的最后一个东西,因为它只是我已经以模型和视图模型的形式构建的数据和逻辑的不言而喻的表现形式。我的注意力不在 UI 上,而是在我的应用程序处理的实际数据和逻辑上。
这意味着我不会花很多时间研究 UI 特定的 类,除了 UI 特定的问题,例如动画和交互性。
这真的取决于您要在单击按钮时执行的操作。
如果您只想与 U.I 互动。 (例如,更改控件的可见性或其他 属性)那么只有顽固的 MVVM 纯粹主义者会反对这一点。
但是,如果您想做任何与模型或其他数据相关的事情,那将违背 MVVM 在关注点分离方面所代表的一切。
我正在学习和理解 WPF 编程中使用的 MVVM 模式的理论和用法。
来自 WinForms,我仍然倾向于双击一个按钮将我带到单击的事件处理程序。
在线阅读有关 MVVM 的内容,显然 永远不要这样做 ,因为,好吧...我不确定。建议使用 ICommand 接口来封装 UI/View.
调用的动作。我还没有读懂为什么这是首选。如果您使用事件处理程序,您仍然没有打破 View/ViewModel 关系,因为 ViewModel 仍然对 View 一无所知...对吧?
使用命令是否会提供一些事件处理程序所不具备的额外灵活性?如果有的话,我觉得使用命令会使代码更加混乱,因为您必须回溯才能找到 ICommand 逻辑。使用事件处理程序,它就在视图背后的代码中。我错过了什么吗?
那么,从本质上讲,使用事件处理程序而不是命令是否违反了 MVVM 模式?
With event handlers, it's all right there in the code behind the View.
这正是您必须避免的。
您的应用程序的逻辑(或者更糟糕的是,您的业务逻辑)不属于 UI 并且永远不应放在代码后面。这就是存在 ViewModel 命令的原因。
当然,如果您的按钮触发动画或执行任何其他 UI 特定任务,那么是的,处理事件处理程序并将该代码放在 UI 中是有意义的。
是的,如果您来自 winforms,请正确分离关注点并避免将 UI 与您的应用程序的其余部分混合在一起,一开始可能看起来有点复杂,但一旦您理解它就会真正得到回报这如何帮助生成非常干净的代码,以及如何 100% 自定义 UI 而无需更改应用程序逻辑中的一行代码。
另外,你的感觉
you have to backtrack to find the ICommand logic
也是由于您的 winforms 背景,您的注意力集中在 UI 并且您以 UI 为中心的方式推理您的代码。在 WPF 中,UI 是我通常构建的最后一个东西,因为它只是我已经以模型和视图模型的形式构建的数据和逻辑的不言而喻的表现形式。我的注意力不在 UI 上,而是在我的应用程序处理的实际数据和逻辑上。
这意味着我不会花很多时间研究 UI 特定的 类,除了 UI 特定的问题,例如动画和交互性。
这真的取决于您要在单击按钮时执行的操作。
如果您只想与 U.I 互动。 (例如,更改控件的可见性或其他 属性)那么只有顽固的 MVVM 纯粹主义者会反对这一点。
但是,如果您想做任何与模型或其他数据相关的事情,那将违背 MVVM 在关注点分离方面所代表的一切。