这是因为事件的使用显式地破坏了MVVM模式(我相信你知道)。然而,还有另外一种方法 - 使用Attached Command Behaviour pattern。更多信息here。
代码为附加命令的一个小而伟大的框架可以从here下载。
我希望这会有所帮助。
编辑。附加的行为允许您在不中断MVVM模式的情况下使用事件。使用就像
<Border Background="Yellow" Width="350" Margin="0,0,10,0" Height="35" CornerRadius="2" x:Name="test">
<local:CommandBehaviorCollection.Behaviors>
<local:BehaviorBinding Event="MouseLeftButtonDown"
Action="{Binding DoSomething}"
CommandParameter="An Action on MouseLeftButtonDown"/>
<local:BehaviorBinding Event="MouseRightButtonDown"
Command="{Binding SomeCommand}"
CommandParameter="A Command on MouseRightButtonDown"/>
</local:CommandBehaviorCollection.Behaviors>
<TextBlock Text="MouseDown on this border to execute the command"/>
</Border>
你说得对。还有其他框架与行动和类似的东西,但仍然。很常见的是,一旦你点击一个按钮,你需要从模型中得到一些额外的信息来做一些特定的验证或类似的事情,如果你使用附加属性或附加命令来完成这个小任务,它听起来像是一种解决方法。所有这些只是因为绑定事件不起作用。 –
绑定事件确实有效,但正如我所说的,处理程序会坐在视图的代码后面。 MVVM是WPF中可实现的设计模式,但这需要一些不是开箱即用的实现。因此,强烈建议您使用MVVM框架来避免尝试将已完成的工作重新实现为极高的标准。 MVVM框架不仅解决了指挥问题,而且还解决了如果您试图单独实施MVVM时将面临的一系列问题。 – devdigital
你能提供一些关于这方面的链接吗?以防有人在互联网上绊倒这个问题。 –