我是C#,WPF和MVVM模式的新手。很抱歉这篇文章有点长,我正在尝试阐述我的所有理解点(或者不理解点)。
在研究了许多有关WPF提供的命令机制以及MVVM模式的文本后,我在如何使用这些东西方面遇到了一些问题。
我知道WPF提供的命令允许定义多个"调用点",用于调用保存在可视树组件中的命令逻辑。当调用命令时,呼叫从可视树中冒泡(从命令目标或聚焦元素开始),直到撞到一个包含定义命令逻辑的CommandBinding的元素为止。
这看起来很好,因为您可以首先定义公共命令,而无需指定逻辑或调用点。
我还明白,根据MVVM模式,View的ViewModel应该处理逻辑,而基本的WPF命令实现只允许视觉元素处理它,因为调用通过视觉树冒泡。
然后我发现,在这种情况下可以使用自定义实现,例如Josh Smith的RelayCommand,因为您将由视图元素(例如按钮)调用的命令绑定到ViewModel中的RelayCommand对象。
但是,我看不到它如何是一个命令(按照WPF命令模式的定义),因为我们直接指定了在ViewModel中引用的实现。使用此方法,我们失去了能够从任何地方调用命令而不知道逻辑实现位置的所有好处。在这种情况下,为什么不直接使用单击事件处理程序(例如)?
有人能解释一下我错在哪里吗? (感谢那些读完了这篇文章的人!)
问候。 NR
ICommand
中 - 你可以有一个只组合多个方法的ICommand
,就像有一个调用>1个方法的方法一样。 - Reed Copsey