我是 C#、WPF 和 MVVM 模式的新手。很抱歉这篇很长的帖子,我试图设定我所有的理解点(或不理解点)。
在研究了很多关于 WPF 提供的命令机制和 MVVM 模式的文本之后,我在弄清楚如何使用这些东西时遇到了一些问题。
我了解为 WPF 提供的命令允许为可视树组件中保存的命令逻辑定义多个“调用点”。调用命令时,调用会在可视树中冒泡(从命令目标或焦点元素开始),直到遇到一个包含 CommandBinding 的元素,该元素定义了命令逻辑的位置。
看起来不错的是,您可以在不指定逻辑或调用点的情况下定义公共命令。
我也明白,遵循 MVVM 模式,视图的 ViewModel 应该处理逻辑,而命令的基本 WPF 实现只允许视觉元素处理它,因为调用通过视觉树冒泡。
然后我发现在这种情况下可以使用自定义实现,例如 Josh Smith 的 RelayCommand,因为您将视图元素(例如按钮)调用的命令绑定到底层 ViewModel 中的 RelayCommand 对象。
但是,我不再看到它是一个命令(根据 WPF 命令模式的定义),因为我们直接指定了 ViewModel 中引用的实现。使用这种方法,我们失去了能够从任何地方调用命令而不知道逻辑在哪里实现的所有好处。在这种情况下,为什么不直接使用 Click 事件处理程序(例如)?
有人可以解释我哪里错了吗?(感谢那些把帖子读到最后的人!)
问候。NR